Metto una variabile ActiveOne di tipo Layout e lo imposto al valore del Layout toccato o, se viene cliccato lo sfondo, a null.
Creo la variabile...
... int openFlag=0; boolean settingMode=false; String currentCat; int mlX; int mlY; LinearLayout ActiveOne; ...Inserisco in ACTIVE_DOWN dell'OnTouch il codice che la imposta:
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;
}
break;
...e inserisco il comando che annulla ActiveOne quando viene toccato lo sfondo:
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;
return false;
}
});
Insieme al toccamento di un'immagine va fatto apparire il bottone per cancellarla:
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;
button.setVisibility(View.VISIBLE);
}
break;
...e va fatto sparire il bottone quando si seleziona lo sfondo:
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;
button.setVisibility(View.INVISIBLE);
return false;
}
});
Aggiungo un codice per il button che cancelli il Layout identificato da ActiveOne:
button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { TextView et=(TextView)ActiveOne.getChildAt(numEtichetta); TextView ct=(TextView)ActiveOne.getChildAt(numCategoria); Log.d(et.getText().toString(), ct.getText().toString()); helper.cancella(et.getText().toString(), ct.getText().toString()); ActiveOne=null; mainLayout.removeAllViews(); try{ leggiDaDatabase(currentCat); } catch(Exception e){} button.setVisibility(View.INVISIBLE); } });E funziona!
Ho aggiunto anche un'autocancellazione del button, che a questo punto non serve. Per riattivarlo bisognerà cliccare su un altro Layout.
Il button viene reso invisibile anche qualora si uscisse dalla modalità settingMode, vi ho aggiunto il codice necessario, perché se è stato selezionato un Layout in modalità settingMode e si tornasse alla modalità operativa immediatamente il bottone resterebbe indebitamente visibile, rischiandosi di cancellare involontariamente un Layout.
Il codice è stato aggiunto al listener screwOpen, quello che governa lo "svitamento" delle viti:
screwOpen = new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Vibrator vib = (Vibrator) getApplicationContext().getSystemService(Context.VIBRATOR_SERVICE);
// Vibrate for 500 milliseconds
vib.vibrate(500);
if(v==leftTop && openFlag==0) {
openFlag=1;
if(settingMode==false) leftTop.setImageResource(R.drawable.unscrewed);
else leftTop.setImageResource(R.drawable.screwed);
}
if(v==rightTop && openFlag==1) {
openFlag=2;
if(settingMode==false) rightTop.setImageResource(R.drawable.unscrewed);
else rightTop.setImageResource(R.drawable.screwed);
}
if(v==leftBottom && openFlag==2){
openFlag=3;
if(settingMode==false) leftBottom.setImageResource(R.drawable.unscrewed);
else leftBottom.setImageResource(R.drawable.screwed);
}
if(v==rightBottom && openFlag==3) {
if(settingMode==false){
rightBottom.setImageResource(R.drawable.unscrewed);
settingMode=true;
} else
{
rightBottom.setImageResource(R.drawable.screwed);
settingMode=false;
button.setVisibility(View.INVISIBLE);
}
openFlag=0;
}
return false;
}
};
Nessun commento:
Posta un commento