99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

Android Gestures(手勢(shì))

2023-03-31 13:44 更新

本節(jié)引言:

周六不休息,剛剪完了個(gè)大平頭回來,繼續(xù)碼字~

好的,本節(jié)給大家?guī)睃c(diǎn)的是第三章的最后一節(jié)——Gestures(手勢(shì)), 用過魅族手機(jī)的朋友相信對(duì)手勢(shì)肯定是不陌生的,在home鍵兩側(cè)像屏幕內(nèi)滑動(dòng), 可以打開后臺(tái)任務(wù)列表等等~在應(yīng)用中通過手勢(shì)來操作會(huì)大大提升用戶體驗(yàn), 比如Scroll手勢(shì)在瀏覽器中個(gè)滾屏,F(xiàn)ling在瀏覽器中的換頁(yè)等!

當(dāng)然,有利也有弊,比如不當(dāng)?shù)氖謩?shì)操作引起APP Carsh,經(jīng)常這樣可是會(huì)引起用戶不滿的! 所以是否要為你的應(yīng)用增加手勢(shì),可要考慮清楚哦!另外手勢(shì)要和前面學(xué)的單指/多指觸碰相區(qū)分哦!

手勢(shì)是:連續(xù)觸碰的行為,比如左右上下滑動(dòng)屏幕,又或者畫一些不規(guī)則的幾何圖形! Android對(duì)上述兩種手勢(shì)行為都提供了支持:

  • Android提供手勢(shì)檢測(cè),并為手勢(shì)識(shí)別提供了相應(yīng)的監(jiān)聽器!
  • Android運(yùn)行開發(fā)者自行添加手勢(shì),并且提供了相應(yīng)的API識(shí)別用戶手勢(shì)!

如果你的手機(jī)是Android 4.x的原生Android系統(tǒng)的話,你可能可以在你的手機(jī)或者平板上看到谷歌 提供的一個(gè)Gesture Builder的APP,該應(yīng)用允許用戶以類似于涂鴉的方式繪制一個(gè)手寫符號(hào),使之 對(duì)應(yīng)一個(gè)字符串名稱!當(dāng)然,沒有這樣的手機(jī)也沒關(guān)系,我們有模擬器嘛,自己開個(gè)4.0的系統(tǒng)試試 就知道了,另外,我們可以到\mmt\sdcard\gestures獲取到保存手勢(shì)的文件! 好了,嘮嘮叨叨那么多,開始講正題吧!

對(duì)了,貼下官方API文檔先:GestureDetector


1.Android中手勢(shì)交互的執(zhí)行順序

  • 1.手指觸碰屏幕時(shí),觸發(fā)MotionEvent事件!
  • 2.該事件被OnTouchListener監(jiān)聽,可在它的onTouch()方法中獲得該MotionEvent對(duì)象!
  • 3.通過GestureDetector轉(zhuǎn)發(fā)MotionEvent對(duì)象給OnGestureListener
  • 4.我們可以通過OnGestureListener獲得該對(duì)象,然后獲取相關(guān)信息,以及做相關(guān)處理!

我們來看下上述的三個(gè)類都是干嘛的: MotionEvent: 這個(gè)類用于封裝手勢(shì)、觸摸筆、軌跡球等等的動(dòng)作事件。 其內(nèi)部封裝了兩個(gè)重要的屬性X和Y,這兩個(gè)屬性分別用于記錄橫軸和縱軸的坐標(biāo)。 GestureDetector: 識(shí)別各種手勢(shì)。OnGestureListener: 這是一個(gè)手勢(shì)交互的監(jiān)聽接口,其中提供了多個(gè)抽象方法, 并根據(jù)GestureDetector的手勢(shì)識(shí)別結(jié)果調(diào)用相對(duì)應(yīng)的方法。

——上述資料摘自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1020/448.html

2.GestureListener詳解:

從1中我們知道了監(jiān)聽手勢(shì)的關(guān)鍵是:GestureListener 他給我們提供了下述的回調(diào)方法:

  • 按下(onDown): 剛剛手指接觸到觸摸屏的那一剎那,就是觸的那一下。
  • 拋擲(onFling): 手指在觸摸屏上迅速移動(dòng),并松開的動(dòng)作。
  • 長(zhǎng)按(onLongPress): 手指按在持續(xù)一段時(shí)間,并且沒有松開。
  • 滾動(dòng)(onScroll): 手指在觸摸屏上滑動(dòng)。
  • 按?。╫nShowPress): 手指按在觸摸屏上,它的時(shí)間范圍在按下起效,在長(zhǎng)按之前。
  • 抬起(onSingleTapUp):手指離開觸摸屏的那一剎那。

知道了GestureListener的相關(guān)方法后,實(shí)現(xiàn)手勢(shì)檢測(cè)也很簡(jiǎn)單,步驟如下:

  • Step 1: 創(chuàng)建GestureDetector對(duì)象,創(chuàng)建時(shí)需實(shí)現(xiàn)GestureListener傳入
  • Step 2: 將Activity或者特定組件上的TouchEvent的事件交給GestureDetector處理即可! 我們寫個(gè)簡(jiǎn)單的代碼來驗(yàn)證這個(gè)流程,即重寫對(duì)應(yīng)的方法:

代碼如下:

public class MainActivity extends AppCompatActivity {

    private MyGestureListener mgListener;
    private GestureDetector mDetector;
    private final static String TAG = "MyGesture";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //實(shí)例化GestureListener與GestureDetector對(duì)象
        mgListener = new MyGestureListener();
        mDetector = new GestureDetector(this, mgListener);

    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return mDetector.onTouchEvent(event);
    }

    //自定義一個(gè)GestureListener,這個(gè)是View類下的,別寫錯(cuò)哦?。。?    private class MyGestureListener implements GestureDetector.OnGestureListener {

        @Override
        public boolean onDown(MotionEvent motionEvent) {
            Log.d(TAG, "onDown:按下");
            return false;
        }

        @Override
        public void onShowPress(MotionEvent motionEvent) {
            Log.d(TAG, "onShowPress:手指按下一段時(shí)間,不過還沒到長(zhǎng)按");
        }

        @Override
        public boolean onSingleTapUp(MotionEvent motionEvent) {
            Log.d(TAG, "onSingleTapUp:手指離開屏幕的一瞬間");
            return false;
        }

        @Override
        public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
            Log.d(TAG, "onScroll:在觸摸屏上滑動(dòng)");
            return false;
        }

        @Override
        public void onLongPress(MotionEvent motionEvent) {
            Log.d(TAG, "onLongPress:長(zhǎng)按并且沒有松開");
        }

        @Override
        public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
            Log.d(TAG, "onFling:迅速滑動(dòng),并松開");
            return false;
        }
    }

}

對(duì)應(yīng)操作截圖:

  1. 按下后立即松開:
  2. 長(zhǎng)按后松開:
  3. 輕輕一滑,同時(shí)松開:
  4. 按住后不放持續(xù)做滑動(dòng)操作:

PS:從上述結(jié)果來看,我們發(fā)現(xiàn)了一個(gè)問題:
我們實(shí)現(xiàn)OnGestureListener需要實(shí)現(xiàn)所有的手勢(shì),可能我針對(duì)的僅僅是滑動(dòng),但是你還是要
去重載,
這顯得很逗逼,是吧,官方肯定會(huì)給出解決方法滴,官方另外給我們提供了一個(gè)
SimpleOnGestureListener類
只需把上述的OnGestureListener替換成SimpleOnGestureListener即可!

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)