JavascriptProva

giovedì 2 giugno 2016

Studio per modifica immagini nell'App.

Bene.
Ora devo mettere l'immagine regolabile e scalabile anche alle funzioni che permettono di modificare l'immagine.
Vediamo un po' come fare...

Innanzitutto, da dove parte il codice?
Eccolo:
//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);
   }
  });
Ecco, questo permette di andare direttamente alla memoria a prendere un'immagine per sostituirla a quella che c'era precedentemente.
Questo non va bene.
Dovrei riaprire invece il form ImagePick.
Vediamo il codice che lo apre...

  //LISTENER PER CREARE UNA NUOVA IMMAGINE
 
  
  mainLayout.setOnLongClickListener(new View.OnLongClickListener() {
   
   @Override
   public boolean onLongClick(View v) {
    if(settingMode){
     Intent intent=new Intent(MainActivity.this,ImagePick.class);
     intent.putExtra("Categoria", currentCat);
     intent.putExtra("CoordX", mlX);
     intent.putExtra("CoordY", mlY);
     startActivity(intent);
    }
    return true;
   }
  });
Ecco: è un Intent esplicito che semplicemente apre ImagePick
E vi immette la categoria corrente, la coordinata X e la coordinata Y di dove è stato esercitato il tocco.
Ma dove prende le variabili mlX e mlY?
Da qui:
  mainLayout.setOnTouchListener(new View.OnTouchListener() {
   
   @Override
   public boolean onTouch(View v, MotionEvent event) {
    mlX=(int)event.getX();
    mlY=(int)event.getY();
    scrollView.requestDisallowInterceptTouchEvent(false);
    ActiveOne=null;
    for(int i=0;i<mainLayout.getChildCount();i++){
     ((ViewGroup)mainLayout.getChildAt(i)).getChildAt(numEtichetta).setBackgroundColor(Color.WHITE);
    }
    button.setVisibility(View.INVISIBLE);
    imgButton.setVisibility(View.INVISIBLE);
    return false;
   }
  });
che è il listener del tocco di mainLayout.

Ristudiamoci il codice:
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  
  Bundle extras=getIntent().getExtras();
  categoria =extras.getString("Categoria");
  coordX=extras.getInt("CoordX");
  coordY=extras.getInt("CoordY");
  setContentView(R.layout.activity_image_pick);
  mainLayout=(RelativeLayout)findViewById(R.id.mainLayout);
  
  //inizializzazione della jImage
  jImage=new JImage();
  
  //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);
  
  //inizializzazioni delle variabili oggetto dei controlli presenti nell'activity
  
  editText=(EditText)findViewById(R.id.editText1);
  editText.setVisibility(View.INVISIBLE);
  radioGroup=(RadioGroup)findViewById(R.id.radioGroup1);
  radioGroup.setVisibility(View.INVISIBLE);
  bttInvia=(Button)findViewById(R.id.button1);
  bttInvia.setVisibility(View.INVISIBLE);
  bttAnnulla=(Button)findViewById(R.id.button2);
  bttPick=(Button)findViewById(R.id.bttPick);
  
  
  
  
//AL TOCCO DEL PULSANTE, PER CARICARE LE IMMAGINI DALLO STORAGE
  bttPick.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);
    
   }
  });
Ecco: dovendo caricare ImagePick per scegliere un'immagine ex novo, abbiamo questa inizializzazione dei vari controlli:
  //inizializzazioni delle variabili oggetto dei controlli presenti nell'activity
  
  editText=(EditText)findViewById(R.id.editText1);
  editText.setVisibility(View.INVISIBLE);
  radioGroup=(RadioGroup)findViewById(R.id.radioGroup1);
  radioGroup.setVisibility(View.INVISIBLE);
  bttInvia=(Button)findViewById(R.id.button1);
  bttInvia.setVisibility(View.INVISIBLE);
  bttAnnulla=(Button)findViewById(R.id.button2);
  bttPick=(Button)findViewById(R.id.bttPick);
La casella di testo dove digitare il nome dell'immagine è invisibile;
i radiobuttons per selezionare se si tratti di un'immagine normale o di una categoria sono invisibili;
Il pulsante Invia è invisibile.
Solo il pulsante Annulla è visibile, come lo è quello che ho aggiunto per andare ad aprire la memoria in modo da selezionare l'immagine.

Qui, invece, devo fare in modo che il nome e il tipo siano già determinate. Dunque su editText deve già figurare il nome dell'immagine e su RadioButtons deve già figurare il tipo. E quindi questi controlli devono essere già visibili.
Forse conviene aprire un altro form per evitare confusioni terribili?

Forse è meglio, sì. Semmai una volta entrato nel meccanismo potrò utilizzare lo stesso form con maggior possibilità di non commettere errori.
Correggo solo l'allineamento del button che carica l'immagine e del controllo Immagine, e ne rendo uguali le ampiezze, giusto per un fatto estetico.
  editText=(EditText)findViewById(R.id.editText1);
  editText.setVisibility(View.INVISIBLE);
  radioGroup=(RadioGroup)findViewById(R.id.radioGroup1);
  radioGroup.setVisibility(View.INVISIBLE);
  bttInvia=(Button)findViewById(R.id.button1);
  bttInvia.setVisibility(View.INVISIBLE);
  bttAnnulla=(Button)findViewById(R.id.button2);
  bttPick=(Button)findViewById(R.id.bttPick);
  bttPick.setX(img.getX());
  bttPick.getLayoutParams().width=img.getLayoutParams().width;
  
E vediamo se funziona...

Okay, funziona!
Passiamo a realizzare l'activity per il cambio di immagine.

Nessun commento:

Posta un commento