У меня есть собственное представление галереи для горизонтальной прокрутки и несколько дочерних представлений, все из которых должны быть кликабельными.
Параметр childview.setOnClickListener()
не работает, так как он всегда использует событие касания.
Поэтому я использовал childview.setOnTouchListener()
и позволил его методу onTouch вернуть false, чтобы Галерея стала прокручиваемой.
Все в порядке.
Теперь проблема в том, что метод onTouch в childView запускает только событие ACTION_DOWN.
Он не передает MotionEvent ACTION_UP, если только я не сделаю View доступным для кликов, установив childview.setClickable()
.
Тем не менее, установка самого представления Viewable, по-видимому, потребляет событие onTouch, так что представление галереи становится непрокручиваемым.
Похоже, я хожу по кругу. Буду благодарен за любую помощь.
Вот мой код
Представление галереи:
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;
}
}
в моем действии:
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) {}
});
}