Tengo una vista de galería personalizada para el desplazamiento horizontal y varias vistas secundarias en las que se debe poder hacer clic.Android: View.setClickable consume el evento click
La configuración childview.setOnClickListener()
no funciona, ya que siempre consume el evento táctil.
Por lo tanto, utilicé childview.setOnTouchListener()
y dejé que su método onTouch devuelva false, de modo que la Galería se puede desplazar.
Esto está todo bien.
El problema ahora es que el método onTouch de childView solo activa el evento ACTION_DOWN. No pasa el MotionEvent ACTION_UP a menos que haga clic en la vista configurando childview.setClickable()
. Sin embargo, la configuración de la vista en la que se puede hacer clic parece consumir el evento onTouch para que la vista de la galería no se pueda deslizar.
Parece que voy en un círculo aquí. Estaría agradecido por cualquier ayuda.
Aquí está mi código
Ver galería:
public class myGallery extends Gallery {
public myGallery(Context ctx, AttributeSet attrSet) {
super(ctx, attrSet);
// TODO Auto-generated constructor stub
}
private boolean isScrollingLeft(MotionEvent e1, MotionEvent e2){
return e2.getX() > e1.getX();
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY){
int kEvent;
if(isScrollingLeft(e1, e2)){ //Check if scrolling left
kEvent = KeyEvent.KEYCODE_DPAD_LEFT;
}else{ //Otherwise scrolling right
kEvent = KeyEvent.KEYCODE_DPAD_RIGHT;
}
onKeyDown(kEvent, null);
return true;
}
}
en mi Actividad:
gallery.setOnItemSelectedListener(new OnItemSelectedListener(){
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
// childView.setClickable(true); // can't use this
// click event would get consumed
// and gallery would not scroll
// therefore, I can only use the ACTION_DOWN event below:
childView.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
//doStuff();
}
return false;
}
});
}
public void onNothingSelected(AdapterView<?> arg0) {}
});
}
obtuviste la respuesta en la segunda mitad. – Prateek