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

分析
setOnClickListener
setOnClickListener 可以接收控件的單擊動作,無返回值
要想拖動控件,就要利用 setOnTouchListener 自己定義了
setOnTouchListener
通過按下時的坐標(biāo)和移動時的坐標(biāo)之間的差值,來計算移動的距離,然后更改控件的位置以達到拖動的目的
因 Touch 事件執(zhí)行完成后如果返回false則會繼續(xù)執(zhí)行單擊事件,不是我們想要的。如果直接返回true代表處理完了事件,不再執(zhí)行單擊事件,也不是我們想要的。
這時候就要判斷什么時候返回true,什么時候返回false,以達到同時實現(xiàn)單擊 + 拖動的目的
實例代碼
綁定事件
//綁定拖動事件
floatView.floatMenuIcon.setOnTouchListener(touchListener);
//綁定單擊事件,此處為lambda表達式
floatView.floatMenuIcon.setOnClickListener(view -> {
EventBus.getDefault().post(AccessibilityService.GLOBAL_ACTION_BACK);
});重寫onTouchListener
注意事項
ACTION_UP為手指抬起時執(zhí)行的事件,單擊事件的判斷放在此處,如果按下時的坐標(biāo)和抬起時的坐標(biāo)相差不大,我們視作單擊動作,后期如果需要處理長按動作或雙擊動作,道理差不多。
完整代碼
private final View.OnTouchListener touchListener = new View.OnTouchListener() {
//記錄初使按下時的坐標(biāo),會因為拖動而改變
private float dX;
private float dY;
//記錄初使按下時的坐標(biāo),不因拖動而改變
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:
//拖動事件,為了能夠?qū)崟r拖動,而非抬起后再移動,所以處理代碼放到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:
//如果抬起時的位置和按下時的位置大致相同視作單擊事件
//間隔值可能為負(fù)值,所以要取絕對值進行比較
if (Math.abs(motionEvent.getRawX() - sX) > 6 && Math.abs(motionEvent.getRawY() - sY) > 6) {
return true;
}
break;
}
return false;
}
};看完上述內(nèi)容,你們掌握使用android控件怎么實現(xiàn)一個單擊拖動效果的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
網(wǎng)站欄目:使用android控件怎么實現(xiàn)一個單擊拖動效果-創(chuàng)新互聯(lián)
網(wǎng)頁URL:http://chinadenli.net/article46/gcdeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗、虛擬主機、App開發(fā)、做網(wǎng)站、服務(wù)器托管、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容