91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

onTouchEvent事件中調用onFling方法

發布時間:2020-06-22 11:31:35 來源:網絡 閱讀:563 作者:truesea 欄目:開發技術

日志表現出:startFling()方法先后在onFling()和onTouch()調用。按照邏輯來說,在onFling()中調用了,即使在onTouch()方法中調用也不會再執行。

11-01 16:09:55.147: D/WatchTvFragment(1026): ++programTouchListener.onTouch++
11-01 16:09:55.147: D/WatchTvFragment(1026): ++onFling++
11-01 16:09:55.147: D/WatchTvFragment(1026): velocityX:139.54526, velocityY:225.4602
11-01 16:09:55.147: D/WatchTvFragment(1026): onFling() set bFlinging to true
11-01 16:09:55.147: D/WatchTvFragment(1026): onFling() invode startFling()
11-01 16:09:55.147: D/WatchTvFragment(1026): ++startFling++
11-01 16:09:55.147: D/WatchTvFragment(1026): event.getAction():1
11-01 16:09:55.147: D/WatchTvFragment(1026): onTouch() set bFlinging to true
11-01 16:09:55.147: D/WatchTvFragment(1026): onTouch() invode startFling()
11-01 16:09:55.147: D/WatchTvFragment(1026): ++startFling++
11-01 16:09:55.197: D/WatchTvFragment(1026): run() set bFlinging to false
11-01 16:09:55.247: D/WatchTvFragment(1026): run() set bFlinging to false

經過處理,startFling()方法不會既執行onFling()方法的調用又去執行onTouch()方法的調用。

在onTouch()方法中的相關代碼片段如下

case MotionEvent.ACTION_UP:
Logger.i(TAG, "event.getAction():" + MotionEvent.ACTION_UP);
programWidth = programListFragment.getView().getMeasuredWidth();
float velocityX = (programParams.leftMargin < programWidth / 2) ? -1000 : 1000;
Logger.i(TAG, "onTouch() invode startFling()");
startFling(velocityX);
break;

在onFling()方法中的相關代碼片段如下

public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
    Logger.i(TAG, "++onFling++");
    Logger.i(TAG, "velocityX:" + velocityX + ", velocityY:" + velocityY);
    Logger.i(TAG, "onFling() invode startFling()");
    startFling(velocityX);
    return true; // 需要返回true
}

方法startFling()的代碼片段如下

boolean bFlinging = false;
void stopFling() {
    bFlinging = false;
}
synchronized void startFling(final float velocityX) {
    Logger.i(TAG, "++startFling++");
    if (bFlinging) {
        Logger.i(TAG, "invalid operation.");
        return;
    }
    Logger.i(TAG, "flinging...");
    bFlinging = true;
    programWidth = programListFragment.getView().getMeasuredWidth();
    new Thread() {
        public void run() {
            int interval = 50;
            float xDistFling;
            int newLeftMargin;
            float decay = 0.98f;
            float v;
            // 速度從(+/-)1000px/s開始。
            if (velocityX > 0 && velocityX < 1000)
                v = 1000;
            else if (velocityX < 0 && velocityX > -1000)
                v = -1000;
            else
                v = velocityX;
            // running表示while循環什么時候結束
            boolean running = true;
            while (running) {
                v *= decay;
                xDistFling = v / 1000 * interval;
                newLeftMargin = programParams.leftMargin + (int) xDistFling;
                if (newLeftMargin <= 0) {
                    newLeftMargin = 0;
                    running = false;
                } else if (newLeftMargin >= channelWidth) {
                    newLeftMargin = channelWidth;
                    running = false;
                }
                programParams.leftMargin = newLeftMargin;
                try {
                    Thread.sleep(interval);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                handler.sendEmptyMessage(0);
            }
            Logger.i(TAG, "flinging finished.");
        }
    }.start();
}

打印出來的日志表現是符合邏輯的,日志如下。

(1)onFling()中執行startFling()方法,在onTouch()中再執行被視為無效操作。

11-01 16:30:29.427: D/WatchTvFragment(2654): ++programTouchListener.onTouch++
11-01 16:30:29.427: D/WatchTvFragment(2654): ++onFling++
11-01 16:30:29.427: D/WatchTvFragment(2654): velocityX:-348.25256, velocityY:215.86748
11-01 16:30:29.427: D/WatchTvFragment(2654): onFling() invode startFling()
11-01 16:30:29.427: D/WatchTvFragment(2654): ++startFling++
11-01 16:30:29.427: D/WatchTvFragment(2654): flinging...
11-01 16:30:29.427: D/WatchTvFragment(2654): event.getAction():1
11-01 16:30:29.427: D/WatchTvFragment(2654): onTouch() invode startFling()
11-01 16:30:29.427: D/WatchTvFragment(2654): ++startFling++
11-01 16:30:29.427: D/WatchTvFragment(2654): invalid operation.
11-01 16:30:29.987: D/WatchTvFragment(2654): flinging finished.

(2)onFling()中沒有執行startFling()方法,在onTouch()中可以執行。

11-01 17:30:52.257: D/WatchTvFragment(8850): ++programTouchListener.onTouch++
11-01 17:30:52.257: D/WatchTvFragment(8850): event.getAction():1
11-01 17:30:52.257: D/WatchTvFragment(8850): onTouch() invode startFling()
11-01 17:30:52.257: D/WatchTvFragment(8850): ++startFling++
11-01 17:30:52.257: D/WatchTvFragment(8850): flinging...
11-01 17:30:52.307: D/WatchTvFragment(8850): flinging finished.


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

克山县| 沧州市| 潜山县| 开封市| 临高县| 都兰县| 武城县| 墨脱县| 岳阳市| 合川市| 门头沟区| 张家口市| 古丈县| 丰台区| 德昌县| 文安县| 莲花县| 桐柏县| 洛川县| 大荔县| 海南省| 汨罗市| 安福县| 永川市| 永丰县| 利辛县| 三门县| 临夏市| 宾阳县| 平邑县| 丹东市| 扎赉特旗| 乡宁县| 双柏县| 化州市| 永吉县| 江川县| 桐乡市| 喀喇沁旗| 棋牌| 余庆县|