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

溫馨提示×

溫馨提示×

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

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

onTouch事件中抬手時讓View自動歸位

發布時間:2020-08-01 11:35:01 來源:網絡 閱讀:404 作者:truesea 欄目:開發技術

在onTouch回調方法中處理滑動效果中,抬手時讓programListFragment自動歸位。在實現過程中,為了使得自動歸位過程可見,在while循環中添加Thread.sleep(10)來處理。在實際運行過程中,自動歸位過程不可見,只見界面卡頓一會,然后直接歸位。這并不符合預期效果。那么為什么會卡頓一會然后就直接歸位呢

以下是實現該效果的代碼片段。

case MotionEvent.ACTION_UP:
    // Logger.i(TAG, "event.getAction():"+MotionEvent.ACTION_UP);
    xUp = event.getX();
    xCurrent = xUp;
    programWidth = programListFragment.getView().getMeasuredWidth();
    int xAutoDist = (params.leftMargin < programWidth / 2) ? -2 : 2;
    while(true) {
        newLeftMargin = params.leftMargin + (int)xAutoDist;
        if(newLeftMargin < 0) {
            params.leftMargin = 0;
            break;
        } else if(newLeftMargin > channelWidth) {
            params.leftMargin = channelWidth;
            break;
        } else {
            params.leftMargin = newLeftMargin;
        }
        try {
            Thread.sleep(10);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        programListFragment.getView().setLayoutParams(params);
    }
    break;
}

經過調試并沒有發現Thread.currentThread().sleep(10)和Thread.sleep(10)之間有什么區別。

以下是解決這個問題的思路和代碼片段:

將Thread.sleep(10)放在新建的子線程中,在休眠結束之后再調用handler來更新leftMargin。

case MotionEvent.ACTION_UP:
    // Logger.i(TAG, "event.getAction():"+MotionEvent.ACTION_UP);
    xUp = event.getX();
    xCurrent = xUp;
    programWidth = programListFragment.getView().getMeasuredWidth();
    final int xAutoDist = (params.leftMargin < programWidth / 2) ? -2 : 2;
    new Thread(){
        public void run() {
            while(true) {
                newLeftMargin = params.leftMargin + (int)xAutoDist;
                if(newLeftMargin < 0) {
                    params.leftMargin = 0;
                    break;
                } else if(newLeftMargin > channelWidth) {
                    params.leftMargin = channelWidth;
                    break;
                } else {
                    params.leftMargin = newLeftMargin;
                }
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                handler.sendEmptyMessage(0);
            }
        }
    }.start();
    break;
}

新建一個handler來更新LayoutParams

final Handler handler = new Handler(){
    @Override
    public void handleMessage(android.os.Message msg) {
        programListFragment.getView().setLayoutParams(params);
    }
};

自動歸位效果基本達到,但是還不理想。這種實現還存在以下問題:

1. 當programListFragment明顯在右側,用力往左一滑時,此時不管抬手時是否已經明顯在左側,都應該以一定速度并且逐漸降速的過程自動滑行歸位到左側。

2. 自動歸位過程是勻速的,不符合實際效果。歸位過程應該是一個減速的過程。

3. 滑出邊界效果可以再優化一下。滑出邊界之后,再反彈回來。

向AI問一下細節

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

AI

松溪县| 陇西县| 读书| 武冈市| 边坝县| 柯坪县| 紫阳县| 自治县| 重庆市| 阿尔山市| 昔阳县| 囊谦县| 海南省| 许昌县| 内黄县| 靖州| 万年县| 桃园市| 绥芬河市| 城固县| 卢龙县| 新沂市| 怀集县| 尖扎县| 西乡县| 马尔康县| 紫阳县| 塔城市| 木里| 谢通门县| 昂仁县| 桂阳县| 泉州市| 手机| 北京市| 高雄市| 广汉市| 辉南县| 阳泉市| 江北区| 临汾市|