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

溫馨提示×

溫馨提示×

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

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

使用android控件怎么實現一個單擊拖動效果

發布時間:2021-01-29 15:56:36 來源:億速云 閱讀:183 作者:Leah 欄目:開發技術

使用android控件怎么實現一個單擊拖動效果?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

分析

setOnClickListener

setOnClickListener 可以接收控件的單擊動作,無返回值

要想拖動控件,就要利用 setOnTouchListener 自己定義了

setOnTouchListener

通過按下時的坐標和移動時的坐標之間的差值,來計算移動的距離,然后更改控件的位置以達到拖動的目的
因 Touch 事件執行完成后如果返回false則會繼續執行單擊事件,不是我們想要的。如果直接返回true代表處理完了事件,不再執行單擊事件,也不是我們想要的。
這時候就要判斷什么時候返回true,什么時候返回false,以達到同時實現單擊 + 拖動的目的

實例代碼

綁定事件

//綁定拖動事件
floatView.floatMenuIcon.setOnTouchListener(touchListener);
//綁定單擊事件,此處為lambda表達式
floatView.floatMenuIcon.setOnClickListener(view -> {
 EventBus.getDefault().post(AccessibilityService.GLOBAL_ACTION_BACK);
});

重寫onTouchListener

注意事項

ACTION_UP為手指抬起時執行的事件,單擊事件的判斷放在此處,如果按下時的坐標和抬起時的坐標相差不大,我們視作單擊動作,后期如果需要處理長按動作或雙擊動作,道理差不多。

完整代碼

private final View.OnTouchListener touchListener = new View.OnTouchListener() {
 //記錄初使按下時的坐標,會因為拖動而改變
 private float dX;
 private float dY;
 //記錄初使按下時的坐標,不因拖動而改變
 private float sX;
 private float sY;

 @SuppressLint("ClickableViewAccessibility")
 @Override
 public boolean onTouch(View view, MotionEvent motionEvent) {
  switch (motionEvent.getAction()) {
   case MotionEvent.ACTION_DOWN:
    dX = motionEvent.getRawX();
    dY = motionEvent.getRawY();
    sX = motionEvent.getRawX();
    sY = motionEvent.getRawY();
    break;
   case MotionEvent.ACTION_MOVE:
    //拖動事件,為了能夠實時拖動,而非抬起后再移動,所以處理代碼放到ACTION_MOVE中
    float nX = (int) motionEvent.getRawX();
    float nY = (int) motionEvent.getRawY();
    float cW = nX - dX;
    float cH = nY - dY;
    dX = nX;
    dY = nY;
    layoutParams.x = (int) (layoutParams.x + cW);
    layoutParams.y = (int) (layoutParams.y + cH);
    windowManager.updateViewLayout(mView, layoutParams);
    break;
   case MotionEvent.ACTION_UP:
    //如果抬起時的位置和按下時的位置大致相同視作單擊事件
    //間隔值可能為負值,所以要取絕對值進行比較
    if (Math.abs(motionEvent.getRawX() - sX) > 6 && Math.abs(motionEvent.getRawY() - sY) > 6) {
     return true;
    }
    break;
  }
  return false;
 }
};

看完上述內容,你們掌握使用android控件怎么實現一個單擊拖動效果的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

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

AI

绥江县| 瑞丽市| 新密市| 思南县| 甘南县| 昭平县| 安多县| 河西区| 额济纳旗| 临高县| 南皮县| 丘北县| 岳阳县| 许昌县| 和林格尔县| 邳州市| 安塞县| 响水县| 平安县| 崇文区| 临沭县| 沅江市| 象州县| 温泉县| 来安县| 保康县| 湟源县| 察哈| 南投市| 寿阳县| 射阳县| 崇义县| 诸城市| 东兴市| 苍山县| 三明市| 高唐县| 孙吴县| 彰武县| 宣武区| 鹿邑县|