我對Android編程有點新,我最近把注意力轉向處理簡單的手勢。我知道GestureDetector和監聽器,並且我成功實現了我需要的簡單手勢(onDown,onFling,onScroll)。 問題是我需要在SimpleOnGestureListener類中不可用的onUp方法。 我有一個活動和一個自定義的視圖。該視圖並沒有真正做任何事情,只是改變背景顏色。我正在做活動中的所有事件處理。實現onUp事件處理程序使用SimpleOnGestureListener
我所嘗試的是在視圖的onTouchListener的onTouch方法中處理ACTION_UP事件,但這種方式onFLing不起作用。 我也在這裏閱讀有關解決方案:OnUp event on GestureDetector,其中說我應該覆蓋onTouchEvent但我不清楚哪些onTouchEvent應該覆蓋,在哪裏以及如何。 我插入我當前的代碼,也許它有幫助。 :)
public class Main extends Activity
{
private GestureDetector gDetector;
public CustomView cView;
View.OnTouchListener gestureListener;
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
public Vibrator vibrator;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
vibrator = (Vibrator)getApplicationContext().getSystemService(Context.VIBRATOR_SERVICE);
gDetector=new GestureDetector(this, new gListener());
gDetector.setIsLongpressEnabled(true);
gestureListener=new View.OnTouchListener(){
public boolean onTouch(View v, MotionEvent event)
{
if(event.getAction()==MotionEvent.ACTION_UP)
{
cView.setBackgroundColor(Color.RED);
return true;
}
else
return gDetector.onTouchEvent(event);
}
};
cView=new CustomView(this);
cView.setOnTouchListener(gestureListener);
cView.setBackgroundColor(Color.BLACK);
cView.setLongClickable(true);
setContentView(cView);
}
class gListener extends GestureDetector.SimpleOnGestureListener
{
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
{
try
{
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
return false;
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
cView.setBackgroundColor(Color.WHITE);
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
cView.setBackgroundColor(Color.GRAY);
}
} catch (Exception e) {
// nothing
}
return false;
}
@Override
public boolean onScroll (MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
{
vibrator.vibrate(30);
Log.d("Event", "MOVE");
return true;
}
@Override
public boolean onDown(MotionEvent e)
{
cView.setBackgroundColor(Color.BLUE);
Log.d("Event", "DOWN");
return true;
}
@Override
public boolean onSingleTapUp(MotionEvent e)
{
Log.d("Event", "UP");
return true;
}
}
}
將在onFling還是工作,如果你''中返回onSingleTapUp FALSE'()'? –