JavascriptProva

domenica 24 aprile 2016

Schema App per la selezione casuale di immagini (Esercitazione)

Creare un database con i seguenti campi:
  • numero _id
  • nome
  • immagine
Estrazione a sorte di tre records del database.

Posizionamento in tre immagini.

Selezione a sorte di una delle tre immagini.

Lettura del nome associato a una delle immagini.

Al click su una delle immagini, se è quella giusta, evento premiante.


Iniziamo: creazione del database...

Non ricordo il codice per convertire una bitmap in array di bytes in modo da poter essere memorizzata nel database sotto forma di un dato tipo blob...

Per fortuna ho trovato i miei stessi appunti
Devo istanziare ByteArrayOutputStream.
Ma prima devo selezionare un'immagine dalla memoria.
Non ricordo la sintassi della funzione che converte un Uri in un Path.

Devo ragionarmela...

Partiamo dall'entità più o meno astratta di "risolutore di contenuti", che ha un metodo query che accetta come parametri Uri seguito da 4 null.
Identificando un Cursor con questa query, si estrae da questo cursor il numero di indice di MediaStore.Images.ImageColumns.DATA, mediante il metodo di Cursor getColumnIndex
All'indice di questo campo si estrae la stringa.

Proviamo...

Bene, tutto bene, mi sono riesercitato a scrivere.

Voglio crearmi uno schema per un ImagePicker.
Cliccando sull'immagine anteprima si seleziona l'immagine, che va sull'immagine anteprima.
Quindi si apre una casella per l'immissione di testo (EditText), compilata la quale appare il pulsante per l'immissione nel database.
Cerchiamo di standardizzare questo schema.

Inizialmente il bttInvia è invisibile.
Ecco il codice per la modifica di un EditText (che avevo completamente dimenticato):
  editText.addTextChangedListener(new TextWatcher(){

   @Override
   public void beforeTextChanged(CharSequence s, int start, int count,
     int after) {
    // TODO Auto-generated method stub
    
   }

   @Override
   public void onTextChanged(CharSequence s, int start, int before,
     int count) {
    if(s.equals("")==false){
     radioGroup.setVisibility(View.VISIBLE);
     bttInvia.setVisibility(View.VISIBLE);
    }
    
   }

   @Override
   public void afterTextChanged(Editable s) {
    
   }
   
  });
Dunque lo schema è:
EditText INVISIBILE
bttInvia INVISIBILE

Al caricamento dell'immagine Anteprima:
EditText VISIBILE
bttInvia INVISIBILE

Al cambiamento della EditText:
EditText VISIBILE
bttInvia VISIBILE
Eccoli riprodotti:

Iniziale:
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_image_picker);
  
  testo=(EditText)findViewById(R.id.editText1);
  testo.setVisibility(View.INVISIBLE);
  
  bttInvia=(Button)findViewById(R.id.button1);
  bttInvia.setVisibility(View.INVISIBLE);


Dopo il caricamento dell'immagine Anteprima:
 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data){
  if(resultCode==RESULT_OK){
   String path =UriToPath(this,data.getData());
   Bitmap bitmap=BitmapFactory.decodeFile(path);
   imgAnteprima.setImageBitmap(bitmap);
   testo.setVisibility(View.VISIBLE);
  }
 }


Dopo il cambiamento del testo della EditText:
  testo.addTextChangedListener(new TextWatcher(){

   @Override
   public void beforeTextChanged(CharSequence s, int start, int count,
     int after) {
    // TODO Auto-generated method stub
    
   }

   @Override
   public void onTextChanged(CharSequence s, int start, int before,
     int count) {
    bttInvia.setVisibility(View.VISIBLE);
    
   }

   @Override
   public void afterTextChanged(Editable s) {
    // TODO Auto-generated method stub
    
   }
   
  });
A tutto questo aggiungiamo il codice per il salvataggio nel database dell'immagine e del suo nome. Per salvare nel database devo scrivere però il codice per convertire la bitmap in un array di bytes.
  bttInvia.setOnClickListener(new View.OnClickListener() {
   
   @Override
   public void onClick(View v) {
    ByteArrayOutputStream bos=new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.JPEG, 80, bos);
    byteImage=bos.toByteArray();
    Helper helper=new Helper(getApplicationContext());
    helper.save(testo.getText().toString(), byteImage);
    finish();
    
   }
  });

Nessun commento:

Posta un commento