我有一个用于水平滚动的自定义图库视图和几个所有应该可点击的子视图.
设置childview.setOnClickListener()不起作用,因为它总是使用触摸事件.
因此,我使用了childview.setOnTouchListener()并让它的onTouch方法返回false,以便Gallery可以滚动.
这一切都很好.
现在的问题是,childView的onTouch方法只会触发ACTION_DOWN事件.
除非我通过设置childview.setClickable()使View可单击,否则它不会传递MotionEvent ACTION_UP.
但是,设置View clickable本身似乎会消耗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) {}
});
}