Android Gesture

         Activity觸摸或點擊事件檢測可以直接覆蓋它的onTouch方法,如果是對Activity中的控件進行觸摸或點擊事件進行檢測的話,主要有兩種方法。一是直接使用設置方法設置監聽器,如setOnClickListener等,二是實現OnTouchListene與OnGestureListener接口,使用GestureDetector協助處理各種事件。下面的源碼展示的是第二種實現方式,佈局文件中就是一個TextView控件,這裏就不展示了


import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.TextView;


public class CopyOfMainActivity extends Activity implements OnTouchListener,
OnGestureListener {


private GestureDetector mGestureDetector;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView v = (TextView) findViewById(R.id.test);
v.setOnTouchListener(this);
v.setFocusable(true);
v.setClickable(true);
v.setLongClickable(true);
mGestureDetector = new GestureDetector(this, this);
mGestureDetector.setIsLongpressEnabled(true);
}


/**
* 鼠標(在模擬器上測試)在TextView上按下時觸發
*/
@Override
public boolean onDown(MotionEvent e) {
Log.d("wyp", "onDown");
return true;
}


/**
* 鼠標在textView上按下,短暫停頓會觸發該方法
*/
@Override
public void onShowPress(MotionEvent e) {
Log.d("wyp", "onShowPress");
}



/**
* 鼠標在textView上按下,停頓比較長時會觸發該方法。由於長停頓肯定包含短停頓,
* 所以onShowPress也會被觸發,接着在觸發該方法
*/
@Override
public void onLongPress(MotionEvent e) {
Log.d("wyp", "onLongPress");
}


/**
* 鼠標在textView上放開時,觸發該方法
*/
@Override
public boolean onSingleTapUp(MotionEvent e) {
Log.d("wyp", "onSingleTapUp");
return true;
}


/**
* 鼠標在TextView上移動時會觸發該方法
*/
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
Log.d("wyp", "onScroll");
return true;
}


/**
* 鼠標在TextView上按下移動後放開,會觸發該方法,而不是onSingleTapUp
*/
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
Log.d("wyp", "onFling-->e1Acrion:" + e1.getAction() + " e1X:" + e1.getX()
+ " e2Acrion:" + e2.getAction() + " e2X:" + e2.getX()
+ " velocityX:" + velocityX + " velocityY:" + velocityY);
return true;
}


/**
* 鼠標在TextView有觸摸動作會觸發該方法
*/
@Override
public boolean onTouch(View v, MotionEvent event) {
//使用GestureDetector檢測動作
return mGestureDetector.onTouchEvent(event);
}


}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章