Toque ouvinte e a mudança de pai
-
20-12-2019 - |
Pergunta
Peço desculpas pelo meu inglês.Eu tenho um problema.Eu uso uma ouvintes LongClick e TouchListener.
No longa clique - a vista é removido e o pai ver é inserido o outro pai.Toque pára de funcionar, porque não houve uma alteração pai.
Como faço para manter TouchListener para Ler?
static boolean drag = false;
static View parent;
static OnLongClickListener olcl = new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
if(!drag) {
parent = (View) v.getParent();
int[] loc = {0, 0};
v.getLocationOnScreen(loc);
((ViewGroup) parent).removeView(v);
Main.mainRelative.addView(v);
RelativeLayout.LayoutParams par = (LayoutParams) v.getLayoutParams();
par.leftMargin = loc[0];
par.topMargin = loc[1];
v.setLayoutParams(par);
drag = true;
return true;
}
return false;
}
};
static OnTouchListener otl = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(v.getParent() != null && v.getParent() == Main.mainRelative) {
//!!!!!!!!!!!!!
RelativeLayout.LayoutParams par = (LayoutParams) v.getLayoutParams();
par.leftMargin = (int) (event.getRawX() - v.getWidth()/2);
par.topMargin = (int) (event.getRawY() - v.getHeight()/1.2);
v.setLayoutParams(par);
for(int y = 0; y < Main.radioGroupLeftMain.getChildCount(); y++) {
RadioButton rb = (RadioButton) ((ViewGroup) Main.radioGroupLeftMain.getChildAt(y)).getChildAt(0);
if(checkHit((int)event.getRawX(), (int)event.getRawY(), rb)) {
rb.setChecked(true);
} else {
rb.setChecked(false);
}
if(event.getAction() == MotionEvent.ACTION_UP) {
try { ((ViewGroup) v.getParent()).removeView(v); } catch(Exception e) {};
if(v.getVisibility() == View.VISIBLE) {
((ViewGroup) parent).addView(v);
}
drag = false;
}
}
}
return false;
}
};
public static boolean checkHit(int x, int y, View v) {
int[] loc = {0, 0};
v.getLocationOnScreen(loc);
Rect rv = new Rect(loc[0], loc[1], loc[0]+v.getWidth(), loc[1]+v.getHeight());
return rv.contains(x, y);
}
Solução
quando você está indo para adicionar modo de exibição Principal.mainRelative.addView(v);
antes de criar este novo modo de Exibição, inicializar com esta vista v como Ver vv = v
em seguida, defina novamente o toque do ouvinte vv.setOnTouchLIstener(ot1);
tente isso deve funcionar...
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow