我一直在打破我的頭過去幾個小時,谷歌搜索了地獄,並沒有在StackOverflow或其他地方的例子爲我工作,所以在這裏它去...自定義視圖與按鈕實現OnGestureListener
我有一個自定義視圖,即extends LinearLayout and implements GestureDetector.OnGestureListener
。
在我的自定義佈局中,我有3個按鈕,每個按鈕都有一個點擊監聽器。 我想要的是能夠在視圖中的任何地方執行某些操作,但也能夠點擊按鈕。
我的onfling函數很好用如果我在視圖內但不在其中一個按鈕上方飛舞。 如果我扔過其中一個按鈕,它會在大多數情況下執行一次點擊,或者在某些情況下不執行任何操作。
這裏是我的代碼的相關部分:
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) {
return false;
}
// right to left swipe
if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
viewFlipper.setInAnimation(slideLeftIn);
viewFlipper.setOutAnimation(slideLeftOut);
viewFlipper.showNext();
return true;
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
viewFlipper.setInAnimation(slideRightIn);
viewFlipper.setOutAnimation(slideRightOut);
viewFlipper.showPrevious();
return true;
}
return false;
}
@Override
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
return true;
}
@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) {
return gestureDetector.onTouchEvent(event);
}
return false;
}
試圖迴歸真實的任意組合;返回false;我能想到...會感謝任何幫助! :)
謝謝!
感謝您的回覆,但我更喜歡不使用SurfaceView,因爲它不適用於此,主要是因爲我的問題應該是在正確的方法中設置正確的「返回true; return false」。 –