Android View進(jìn)行手勢識別詳解
我們在進(jìn)行Android游戲開發(fā)時會用到很多種控制,包括前面講到的按鍵和軌跡球控制方式,除此之外還有手勢操作、重力感應(yīng)等多種控制方式需要了解掌握。本節(jié)主要為大家講解在View中如何進(jì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)友,就來看下兼容性更強(qiá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類繼承,當(dāng)然大家可以從TextView等更高層的界面中實現(xiàn)觸控。
Java代碼
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; //當(dāng)然可以處理velocityY處理向上和向下的動作
}
}
});
}
/*提示大家上面僅僅探測了Fling動作僅僅實現(xiàn)了onFling方法,這里相關(guān)的還有以下幾種方法來實現(xiàn)具體的可以參考我們以前的文章有詳細(xì)的解釋:
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)知識。
以上就是對Android View進(jìn)行的手勢識別的資料整理,謝謝大家對本站的支持,后續(xù)繼續(xù)補(bǔ)充相關(guān)資料。
- Android通過滑動實現(xiàn)Activity跳轉(zhuǎn)(手勢識別器應(yīng)用)
- Android手勢識別器GestureDetector使用詳解
- 札記:android手勢識別功能實現(xiàn)(利用MotionEvent)
- Android基礎(chǔ)開發(fā)之手勢識別
- Android應(yīng)用開發(fā)中觸摸屏手勢識別的實現(xiàn)方法解析
- android開發(fā)之為activity增加左右手勢識別示例
- android創(chuàng)建手勢識別示例代碼
- android使用gesturedetector手勢識別示例分享
- 理解Android的手勢識別提高APP的用戶體驗
- Android使用GestureOverlayView控件實現(xiàn)手勢識別
相關(guān)文章
Android的權(quán)限設(shè)置及自啟動設(shè)置方法
今天小編就為大家分享一篇Android的權(quán)限設(shè)置及自啟動設(shè)置方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07
Android開發(fā)跳轉(zhuǎn)應(yīng)用市場進(jìn)行版本更新功能實現(xiàn)
這篇文章主要為大家介紹了Android實現(xiàn)跳轉(zhuǎn)到應(yīng)用市場進(jìn)行版本更新功能,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04
Android連接MySQL數(shù)據(jù)庫并進(jìn)行增刪改查操作示例講解
這篇文章主要介紹了Android 連接MySQL數(shù)據(jù)庫并進(jìn)行增刪改查操作示例講解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08

