安卓 讓View追隨你的手指移動、移動~

先來個圖吧



大概的效果就是這樣,代碼就一個監(jiān)聽事件,把需要移動的View添加這個監(jiān)聽事件就可以了,具體的參數(shù)要根據(jù)自己的項目情況而定。

private View.OnTouchListenershopCarSettleTouch =new View.OnTouchListener() {

int rawY1,rawX1,rawY,rawX;//手指落下和抬起的位置 用來判斷用戶是移動圖標(biāo)還是點擊事件

? ? int rr,ll;//當(dāng)用戶放開手指的時候? ,通過位置判斷 讓View自動靠邊

? ? int lastX,lastY;// view的的當(dāng)前位置? 用來計算更新view的位置

? ? @Override

? ? public boolean onTouch(View v, MotionEvent event) {

int ea = event.getAction();

DisplayMetrics dm = getResources().getDisplayMetrics();

int screenWidth = dm.widthPixels;

int screenHeight = dm.heightPixels;//需要減掉圖片的高度

? ? ? ? switch (ea) {

case MotionEvent.ACTION_DOWN:

lastX = (int) event.getRawX();//獲取觸摸事件觸摸位置的原始X坐標(biāo)

? ? ? ? ? ? ? ? lastY = (int) event.getRawY();

rawX1 = (int) event.getRawX();

rawY1 = (int) event.getRawY();

case MotionEvent.ACTION_MOVE:

//event.getRawX();獲得移動的位置

? ? ? ? ? ? ? ? int dx = (int) event.getRawX() -lastX;

int dy = (int) event.getRawY() -lastY;

int l = v.getLeft() + dx;

int b = v.getBottom() + dy;

int r = v.getRight() + dx;

int t = v.getTop() + dy;

//下面判斷移動是否超出屏幕

? ? ? ? ? ? ? ? if (l <0) {

l =0;

r = l + v.getWidth();

}

if (t <30) {

t =30;

b = t + v.getHeight();

}

if (r > screenWidth) {

r = screenWidth;

l = r - v.getWidth();

}

if (b > screenHeight -200) {

b = screenHeight -200;

t = b - v.getHeight();

}

v.layout(l, t, r, b);

lastX = (int) event.getRawX();//獲取觸摸事件觸摸位置的原始X坐標(biāo)

? ? ? ? ? ? ? ? lastY = (int) event.getRawY();

v.postInvalidate();

break;

case MotionEvent.ACTION_UP:

this.rawX = (int) event.getRawX();

this.rawY = (int) event.getRawY();

if (v.getLeft() < (screenWidth /2 + v.getWidth() /2)) {

ll =20;

rr =ll + v.getWidth();

}

if (v.getRight() > (screenWidth /2 + v.getWidth() /2)) {

rr = screenWidth -20;

ll =rr - v.getWidth();

}

v.layout(ll, v.getTop(),rr, v.getBottom());

v.postInvalidate();

if (Math.abs(this.rawX -rawX1) >20 || Math.abs(this.rawY -rawY1) >20) {

return true;

}

break;

}

return false;

}

};

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容