View中如何進行手勢識別onFling動作實現(xiàn)介紹
更新時間:2013年06月02日 15:55:00 作者:
下面我們就以實現(xiàn)手勢識別的onFling動作,在CwjView中我們從View類繼承,當然大家可以從TextView等更高層的界面中實現(xiàn)觸控,感興趣的朋友可以了解下哈
很多網(wǎng)友發(fā)現(xiàn)Android中手勢識別提供了兩個類,由于Android 1.6以下的版本比如cupcake中無法使用android.view.GestureDetector,而 android.gesture.Gesture是Android 1.6開始支持的,考慮到仍然有使用Android 1.5固件的網(wǎng)友,就來看下兼容性更強的android.view.GestureDetector。在 android.view.GestureDetector類中有很多種重載版本,下面我們僅提到能夠自定義在View中的兩種方法,分別為 GestureDetector(Context context, GestureDetector.OnGestureListener listener) 和GestureDetector(Context context, GestureDetector.OnGestureListener listener, Handler handler) 。我們可以看到第一個參數(shù)為Context,所以我們想附著到某View時,最簡單的方法就是直接從超類派生傳遞Context,實現(xiàn) GestureDetector里中提供一些接口。
下面我們就以實現(xiàn)手勢識別的onFling動作,在CwjView中我們從View類繼承,當然大家可以從TextView等更高層的界面中實現(xiàn)觸控。
class CwjView extends View {
private GestureDetector mGD;
public CwjView(Context context, AttributeSet attrs) {
super(context, attrs);
mGD = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
int dx = (int) (e2.getX() - e1.getX()); //計算滑動的距離
if (Math.abs(dx) > MAJOR_MOVE && Math.abs(velocityX) > Math.abs(velocityY)) { //降噪處理,必須有較大的動作才識別
if (velocityX > 0) {
//向右邊
} else {
//向左邊
}
return true;
} else {
return false; //當然可以處理velocityY處理向上和向下的動作
}
}
});
}
/*提示大家上面僅僅探測了Fling動作僅僅實現(xiàn)了onFling方法,這里相關(guān)的還有以下幾種方法來實現(xiàn)具體的可以參考我們以前的文章有詳細的解釋:
boolean onDoubleTap(MotionEvent e)
boolean onDoubleTapEvent(MotionEvent e)
boolean onDown(MotionEvent e)
void onLongPress(MotionEvent e)
boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
void onShowPress(MotionEvent e)
boolean onSingleTapConfirmed(MotionEvent e)
boolean onSingleTapUp(MotionEvent e)
*/
//接下來是重點,讓我們的View接受觸控,需要使用下面兩個方法讓GestureDetector類去處理onTouchEvent和onInterceptTouchEvent方法。
@Override
public boolean onTouchEvent(MotionEvent event) {
mGD.onTouchEvent(event);
return true;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
return mGD.onTouchEvent(event);
}
}
本節(jié)關(guān)于View中手勢識別的內(nèi)容就講這些。大家知道,很多Android設(shè)備都提供了重力感應(yīng)器和加速度感應(yīng)器,而稍好些的設(shè)備還具備陀螺儀感應(yīng)器,提供測試角速度功能。下一節(jié)將為大家講解重力感應(yīng)知識。
下面我們就以實現(xiàn)手勢識別的onFling動作,在CwjView中我們從View類繼承,當然大家可以從TextView等更高層的界面中實現(xiàn)觸控。
復(fù)制代碼 代碼如下:
class CwjView extends View {
private GestureDetector mGD;
public CwjView(Context context, AttributeSet attrs) {
super(context, attrs);
mGD = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
int dx = (int) (e2.getX() - e1.getX()); //計算滑動的距離
if (Math.abs(dx) > MAJOR_MOVE && Math.abs(velocityX) > Math.abs(velocityY)) { //降噪處理,必須有較大的動作才識別
if (velocityX > 0) {
//向右邊
} else {
//向左邊
}
return true;
} else {
return false; //當然可以處理velocityY處理向上和向下的動作
}
}
});
}
/*提示大家上面僅僅探測了Fling動作僅僅實現(xiàn)了onFling方法,這里相關(guān)的還有以下幾種方法來實現(xiàn)具體的可以參考我們以前的文章有詳細的解釋:
boolean onDoubleTap(MotionEvent e)
boolean onDoubleTapEvent(MotionEvent e)
boolean onDown(MotionEvent e)
void onLongPress(MotionEvent e)
boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
void onShowPress(MotionEvent e)
boolean onSingleTapConfirmed(MotionEvent e)
boolean onSingleTapUp(MotionEvent e)
*/
//接下來是重點,讓我們的View接受觸控,需要使用下面兩個方法讓GestureDetector類去處理onTouchEvent和onInterceptTouchEvent方法。
@Override
public boolean onTouchEvent(MotionEvent event) {
mGD.onTouchEvent(event);
return true;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
return mGD.onTouchEvent(event);
}
}
本節(jié)關(guān)于View中手勢識別的內(nèi)容就講這些。大家知道,很多Android設(shè)備都提供了重力感應(yīng)器和加速度感應(yīng)器,而稍好些的設(shè)備還具備陀螺儀感應(yīng)器,提供測試角速度功能。下一節(jié)將為大家講解重力感應(yīng)知識。
您可能感興趣的文章:
- php自動識別文字編碼并轉(zhuǎn)換為目標編碼的方法
- 基于jquery的textarea發(fā)布框限制文字字數(shù)輸入(添加中文識別)
- 舉例講解Java的RTTI運行時類型識別機制
- java識別一篇文章中某單詞出現(xiàn)個數(shù)的方法
- Java基于直方圖應(yīng)用的相似圖片識別實例
- Java進階教程之運行時類型識別RTTI機制
- java網(wǎng)絡(luò)編程之識別示例 獲取主機網(wǎng)絡(luò)接口列表
- java asp分析各種搜索引擎的關(guān)鍵字,自動識別url 中關(guān)鍵字的編碼
- 基于OpenCV的PHP圖像人臉識別技術(shù)
- 識別率很高的java文字識別技術(shù)
相關(guān)文章
Android中RecyclerView布局代替GridView實現(xiàn)類似支付寶的界面
RecyclerView比GridView來得更加強大,不僅是在分割線的繪制方面,在條目的編輯上也做得同樣出色,下面就來看一下Android中RecyclerView布局代替GridView實現(xiàn)類似支付寶的界面的實例2016-06-06Android程序打開和對輸入法的操作(打開/關(guān)閉)
整理了一下Android下對輸入法的操作:打開輸入法窗口、關(guān)閉出入法窗口、如果輸入法打開則關(guān)閉,如果沒打開則打開、獲取輸入法打開的狀態(tài)2013-05-05Android仿淘寶頭條基于TextView實現(xiàn)上下滾動通知效果
這篇文章主要介紹了Android TextView實現(xiàn)上下滾動通知效果,需要的朋友可以參考下2017-03-03Android實現(xiàn)頁面跳轉(zhuǎn)的全過程記錄
對于android軟件開發(fā)初級學習者來說,簡單的頁面跳轉(zhuǎn)是必學的,這篇文章主要給大家介紹了關(guān)于Android實現(xiàn)頁面跳轉(zhuǎn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2021-10-10Android ItemDecoration 實現(xiàn)分組索引列表的示例代碼
本篇文章主要介紹了Android ItemDecoration 實現(xiàn)分組索引列表的示例代碼,具有一定的參考價值,有興趣的可以了解一下2017-10-10Android判斷手機是否是小米MIUI系統(tǒng)的方法
這篇文章主要介紹了Android判斷手機是否是小米MIUI系統(tǒng)的方法的相關(guān)資料,需要的朋友可以參考下2016-02-02