我有一個自定義的畫廊視圖水平滾動和幾個子視圖,所有應該是可點擊的。Android:View.setClickable消耗點擊事件
設置childview.setOnClickListener()
不起作用,因爲它總是消耗觸摸事件。
因此,我使用了childview.setOnTouchListener()
並讓它的onTouch方法返回false,以便圖庫變爲可滾動。
這很好。
現在的問題是,childView的onTouch方法只觸發事件的ACTION_DOWN事件。 它不會通過MotionEvent ACTION_UP,除非我通過設置childview.setClickable()
使該視圖可點擊。 但是,設置視圖可點擊本身似乎消耗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) {}
});
}
你在下半場得到了答案。 – Prateek 2013-01-24 09:54:28