JavascriptProva

giovedì 2 giugno 2016

Creazione di una nuova activity per la modifica delle immagini.

Devo lavorare su questo codice di MainActivity:
//LISTENER PER IL BOTTONE IMGBUTTON CHE MODIFICA LE IMMAGINI:
  imgButton.setOnClickListener(new View.OnClickListener() {
   
   @Override
   public void onClick(View v) {
    Intent intent=new Intent();
    intent.setAction(Intent.ACTION_PICK);
    intent.setData(Uri.parse("content://media/external/images/media"));
    startActivityForResult(intent, 0);
   }
  });
che rimanda a:
//ONACTIVITYRESULT PER IMGBUTTON CHE MODIFICA LE IMMAGINI
 
 protected void onActivityResult(int requestCode  , int resultCode, Intent data){
  if(resultCode==RESULT_OK){
   Uri uri= data.getData();
   String path=Funzioni.UriToPath(this, uri);
   byte[] b=Funzioni.PathToByteArray(path, 100, 50);
  
  //estraiamo il testo di etichetta e categoria
   TextView et=(TextView)((ViewGroup)ActiveOne).getChildAt(numEtichetta);
   TextView cat=(TextView)((ViewGroup)ActiveOne).getChildAt(numCategoria);
   helper.imgUpdate(et.getText().toString(), cat.getText().toString(), b);
   imgButton.setVisibility(View.INVISIBLE);
   button.setVisibility(View.INVISIBLE);
   refreshScreen();
  }
 }
L'abbozzo del progetto sarebbe, in imitazione al codice che crea una nuova immagine, aprire l'activity per la modifica e far updatare a questa stessa il database.
ActiveOne si riferisce al gruppo di views che esprimono l'immagine nel mainLayout, qui definite:
  //EVENTLISTENER DELLE IMMAGINI PER MOVIMENTO O AZIONE.
  
  onTouchListener=new View.OnTouchListener() {

   
   @Override
   public boolean onTouch(View v, MotionEvent event) {
    X=(int) event.getRawX();
    Y=(int) event.getRawY();
    switch(event.getAction()){
    case MotionEvent.ACTION_DOWN:
     if(settingMode){
      scrollView.requestDisallowInterceptTouchEvent(true);
      RelativeLayout.LayoutParams lp=(RelativeLayout.LayoutParams)v.getLayoutParams();
      DeltaX=X-lp.leftMargin;
      DeltaY=Y-lp.topMargin;
      ActiveOne=(LinearLayout)v;
      for(int i=0;i<mainLayout.getChildCount();i++){
       ((ViewGroup)mainLayout.getChildAt(i)).getChildAt(numEtichetta).setBackgroundColor(Color.WHITE);
       ActiveOne.getChildAt(numEtichetta).setBackgroundColor(Color.YELLOW);
      }
      button.setVisibility(View.VISIBLE);
      imgButton.setVisibility(View.VISIBLE);
     }
     
       break;
    case MotionEvent.ACTION_MOVE:
     if(settingMode){
      RelativeLayout.LayoutParams lp=(RelativeLayout.LayoutParams)v.getLayoutParams();
      lp.leftMargin=X-DeltaX;
      lp.topMargin=Y-DeltaY;
      v.setLayoutParams(lp);
     }
     
    break;
    case MotionEvent.ACTION_UP:
     if(settingMode){
      TextView et=(TextView)((ViewGroup)v).getChildAt(numEtichetta);
      TextView cat=(TextView)((ViewGroup)v).getChildAt(numCategoria);
      helper.Update(et.getText().toString(), cat.getText().toString(),v.getLeft(), v.getTop());
     }
     else{
      TextView t=(TextView) ((ViewGroup)v).getChildAt(numTipo);
      if(t.getText().equals("categoria")){
       String s=(String) ((TextView)((ViewGroup)v).getChildAt(numEtichetta)).getText();
       //questo è il punto in cui cliccando un'immagine che sia 
       //tipo "categoria" si ha lo pseudo-cambiamento di schermata
       //secondo la categoria.
       currentCat=s;
       refreshScreen();
       
       
       if(s.equals("iniziale")) bttIniziale.setVisibility(View.INVISIBLE);
       else bttIniziale.setVisibility(View.VISIBLE);
      }
      else {
       
       TextView e=(TextView) ((ViewGroup)v).getChildAt(numEtichetta);
       tts.speak(e.getText().toString(), TextToSpeech.QUEUE_FLUSH, null);
       txtTesto.setText(txtTesto.getText()+" "+e.getText());
      }
     }
     
    }
    return true;
   }
  };
...dichiarata come LinearLayout inizialmente.


Fornendo quindi all'activity Modifica i dati, essa stessa updaterà il database.


Per cominciare, oscuro il codice originale del listener del pulsante "modifica immagine" e vi sostituisco un codice che mi mostra etichetta e tipo (categoria) dell'immagine, in previsione di mandarlo alla nuova Activity per mezzo di un intent esplicito:
//LISTENER PER IL BOTTONE IMGBUTTON CHE MODIFICA LE IMMAGINI:
  imgButton.setOnClickListener(new View.OnClickListener() {
   
   @Override
   public void onClick(View v) {
    TextView et=(TextView)((ViewGroup)ActiveOne).getChildAt(numEtichetta);
    TextView cat=(TextView)((ViewGroup)ActiveOne).getChildAt(numCategoria);
    Log.e("NOME E TIPO",et.getText().toString()+" "+cat.getText().toString());
    /*
    Intent intent=new Intent();
    intent.setAction(Intent.ACTION_PICK);
    intent.setData(Uri.parse("content://media/external/images/media"));
    startActivityForResult(intent, 0);*/
   }
  });
E ottengo risultato positivo:
06-02 21:08:47.587: E/NOME E TIPO(13350): lecca lecca iniziale
06-02 21:08:49.589: E/NOME E TIPO(13350): cibi iniziale
Okay.
Adesso posso impostare la nuova activity per usarvi l'intent esplicito. Ecco, ho creato la nuova Activity con un'Immagine:
public class Modifica extends Activity {

 RelativeLayout mainLayout;
 Immagine img;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_modifica);
  mainLayout=(RelativeLayout)findViewById(R.id.mainLayout);
  
  //creo una nuova istanza di Immagine, chiamata img.
  img=new Immagine(this);
  mainLayout.addView(img);
  img.getLayoutParams().width=300;
  img.getLayoutParams().height=300;
  img.setX(50);
  img.setY(70);
  
 }
}
Adesso devo trasmettervi anche i dati dell'immagine che contiene.
Cominciamo a creare l'intent.
//LISTENER PER IL BOTTONE IMGBUTTON CHE MODIFICA LE IMMAGINI:
  imgButton.setOnClickListener(new View.OnClickListener() {
   
   @Override
   public void onClick(View v) {
    TextView et=(TextView)((ViewGroup)ActiveOne).getChildAt(numEtichetta);
    TextView cat=(TextView)((ViewGroup)ActiveOne).getChildAt(numCategoria);
    Intent intent=new Intent(MainActivity.this,Modifica.class);
    startActivity(intent);
    /*
    Intent intent=new Intent();
    intent.setAction(Intent.ACTION_PICK);
    intent.setData(Uri.parse("content://media/external/images/media"));
    startActivityForResult(intent, 0);*/
   }
  });
E per il momento ottengo solo la visualizzazione della nuova Activity che non fa, ancora, assolutamente nulla.
Ora devo trasmettere i dati...
Come si trasmettono? Con putExtra.
Andiamo...

Ecco: trasmetto...
//LISTENER PER IL BOTTONE IMGBUTTON CHE MODIFICA LE IMMAGINI:
  imgButton.setOnClickListener(new View.OnClickListener() {
   
   @Override
   public void onClick(View v) {
    TextView et=(TextView)((ViewGroup)ActiveOne).getChildAt(numEtichetta);
    TextView cat=(TextView)((ViewGroup)ActiveOne).getChildAt(numCategoria);
    Intent intent=new Intent(MainActivity.this,Modifica.class);
    intent.putExtra("etichetta", et.getText());
    intent.putExtra("categoria",cat.getText());
    startActivity(intent);
    /*
    Intent intent=new Intent();
    intent.setAction(Intent.ACTION_PICK);
    intent.setData(Uri.parse("content://media/external/images/media"));
    startActivityForResult(intent, 0);*/
   }
  });
...e ricevo dall'Activity Modifica:
public class Modifica extends Activity {

 RelativeLayout mainLayout;
 Immagine img;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_modifica);
  
  Bundle extras=getIntent().getExtras();
  String etichetta=extras.getString("etichetta");
  String categoria=extras.getString("categoria");
  Log.e(etichetta,categoria);
06-02 21:29:27.347: E/lecca lecca(16426): iniziale
06-02 21:29:37.086: E/cibi(16426): iniziale

Adesso la sfida successiva è trasmettere l'immagine perché appaia nell'immagine dell'Activity Modifica...

Nessun commento:

Posta un commento