午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

您的位置:首頁技術(shù)文章
文章詳情頁

android控件實(shí)現(xiàn)單擊拖動(dòng)效果

瀏覽:30日期:2022-09-21 08:15:28

本文實(shí)例為大家分享了android控件實(shí)現(xiàn)單擊拖動(dòng)效果的具體代碼,供大家參考,具體內(nèi)容如下

分析

setOnClickListener

setOnClickListener 可以接收控件的單擊動(dòng)作,無返回值

要想拖動(dòng)控件,就要利用 setOnTouchListener 自己定義了

setOnTouchListener

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

實(shí)例代碼

綁定事件

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

重寫onTouchListener

注意事項(xiàng)

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

完整代碼

private final View.OnTouchListener touchListener = new View.OnTouchListener() { //記錄初使按下時(shí)的坐標(biāo),會(huì)因?yàn)橥蟿?dòng)而改變 private float dX; private float dY; //記錄初使按下時(shí)的坐標(biāo),不因拖動(dòng)而改變 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: //拖動(dòng)事件,為了能夠?qū)崟r(shí)拖動(dòng),而非抬起后再移動(dòng),所以處理代碼放到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: //如果抬起時(shí)的位置和按下時(shí)的位置大致相同視作單擊事件 //間隔值可能為負(fù)值,所以要取絕對(duì)值進(jìn)行比較 if (Math.abs(motionEvent.getRawX() - sX) > 6 && Math.abs(motionEvent.getRawY() - sY) > 6) { return true; } break; } return false; }};

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Android
相關(guān)文章:
主站蜘蛛池模板: 久久久久久久中文字幕 | 天天久久久| 羞羞网站视频 | 国产欧美精品一区二区三区 | 看av网址 | 99久久久久成人国产免费 | 黄色1级毛片 | 中文字幕欧美视频 | 国产乱真实合集 | 日本一级在线观看 | 亚洲成人精品一区 | 91狠狠综合久久久久久 | 亚洲狼人综合 | 激情黄色片 | 一级免费黄色录像 | 激情久久视频 | 黄网视频在线观看 | 亚洲人人精品 | 亚洲第九十九页 | 爱草av| 男女全黄做爰文章 | 黄色福利网 | av一区二区在线播放 | 超碰免费视 | 一本色道久久综合亚洲精品按摩 | 毛片大全免费 | av在线资源观看 | 第四色激情网 | 久久精品国产精品亚洲精品色 | 在线观看色视频 | 狠狠干中文字幕 | 狠狠插狠狠插 | aⅴ天堂 | 国产精品wwww | 中文字幕av第一页 | 日韩视频一区二区三区 | 义姐是不良妈妈在线观看 | 九九热最新视频 | 午夜免费福利视频 | 成人午夜免费视频 | 久久久午夜视频 |