日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android layout 点击,Tips_Android点击事件(Down、Move、Up)的分发_重写Layout响应拖动事件...

發布時間:2025/4/5 Android 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android layout 点击,Tips_Android点击事件(Down、Move、Up)的分发_重写Layout响应拖动事件... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先是點擊事件在不同的布局層次中傳遞的。

理解Down事件再哪個層次被消費(攔截),后續的Move、Up的點擊事件如何傳遞。

其中ViewGroup中onInterceptTouchEvent方法用來對事件作預處理的,對于Down事件返回true表示要消費這個事件,不再向子View傳遞。

onInterceptTouchEvent用于改變事件的傳遞方向。決定傳遞方向的是返回值,返回為false時事件會傳遞給子控件,返回值為true時事件會傳遞給當前控件的onTouchEvent(),這就是所謂的Intercept(攔截)。

[tisa ps:正確的使用方法是,在此方法內僅判斷事件是否需要攔截,然后返回。即便需要攔截也應該直接返回true,然后由onTouchEvent方法進行處理。]

onTouchEvent用于處理事件,返回值決定當前控件是否消費(consume)了這個事件。尤其對于ACTION_DOWN事件,返回true,表示我想要處理后續事件;返回false,表示不關心此事件,并返回由父類進行處理。

可能你要問是否消費了又區別嗎,反正我已經針對事件編寫了處理代碼?答案是有區別!比如ACTION_MOVE或者ACTION_UP發生的前提是一定曾經發生了ACTION_DOWN,如果你沒有消費ACTION_DOWN,那么系統會認為ACTION_DOWN沒有發生過,所以ACTION_MOVE或者ACTION_UP就不能被捕獲。

在沒有重寫onInterceptTouchEvent()和onTouchEvent()的情況下(他們的返回值都是false),?對上面這個布局,MotionEvent事件的傳遞順序如下:

當某個控件的onInterceptTouchEvent()返回值為true時,就會發生截斷,事件被傳到當前控件的onTouchEvent()。如我們將LayoutView2的onInterceptTouchEvent()返回值為true,則傳遞流程變成:

如果我們同時將LayoutView2的onInterceptTouchEvent()和onTouchEvent()設置成true,那么LayoutView2將消費被傳遞的事件,同時后續事件(如跟著ACTION_DOWN的ACTION_MOVE或者ACTION_UP)會直接傳給LayoutView2的onTouchEvent(),不傳給其他任何控件的任何函數。同時傳遞給子空間一個ACTION_CANCEL事件。傳遞流程變成(圖中沒有畫出ACTION_CANCEL事件):

?? ? ? ??

[tisa ps:總體來看,?onInterceptTouchEvent是自rootview向下傳遞, onTouchEvent正好相反。]

基于以上點擊事件的傳遞,可以重寫一些ViewGroup,響應其拖動的事件,比如LinearLayout,重寫其onInterceptTouchEvent()和onTouchEvent()兩個方法可以達到效果(具體看實際布局中子view對事件的消費情況而定)

//true是攔截,false是不攔截。這里只是預處理判斷點擊的位置,不攔截。

@Override

public?boolean?onInterceptTouchEvent(MotionEvent?ev)?{

if?(ev.getAction()?==?MotionEvent.ACTION_DOWN)?{

int?x?=?(int)?ev.getX();

int?y?=?(int)?ev.getY();

dragSrcPointY?=?y;

FTLog.d(_TAG,?"x="?+?x?+?",y="?+?y);

}

return?super.onInterceptTouchEvent(ev);

}

@Override

public?boolean?onTouchEvent(MotionEvent?ev)?{

//只有判斷是點擊觸發拖動的區域時,才進行處理。否則不處理,交予FTBounceListView舊邏輯處理。

int?action?=?ev.getAction();

switch?(action)?{

case?MotionEvent.ACTION_DOWN:

//FTLog.e("TMS===down==",?"tms");

//bConsumeDown?=?true;

return?true;

//case?MotionEvent.ACTION_MOVE:

//FTLog.e("TMS===move==",?"tms");

//if?(bConsumeDown?==?false)

//{

//super.onTouchEvent(ev);

//}

//break;

case?MotionEvent.ACTION_UP:

FTLog.d(_TAG,?"x="+ev.getX()+",y="+ev.getY());

if?(ev.getY()?

{//向上拖動距離超過20dip,才finish,動畫效果。

try?{

((Activity)?context).finish();

((Activity)?context).overridePendingTransition(

R.anim.move_bottom_in,?R.anim.move_top_out);

}?catch?(Exception?e)?{

e.printStackTrace();

}

}

return?true;

default:

break;

}

return?super.onTouchEvent(ev);

}

其他視具體情況而定,比如listview的最后一條,某中間區域響應拖動的事件:

//true是攔截,false是不攔截。這里只是預處理判斷點擊的位置,不攔截。

@Override

public?boolean?onInterceptTouchEvent(MotionEvent?ev)?{

if?(ev.getAction()?==?MotionEvent.ACTION_DOWN)?{

bConsumeDown?=?false;

int?x?=?(int)?ev.getX();

int?y?=?(int)?ev.getY();

dragSrcPosition?=?pointToPosition(x,?y);

dragSrcPointY?=?y;

if?(dragSrcPosition?==?AdapterView.INVALID_POSITION)?{

return?super.onInterceptTouchEvent(ev);

}

FTLog.d(_TAG,?"x="?+?x?+?",y="?+?y);

FTLog.d(_TAG,?"dragSrcPosition=="?+?dragSrcPosition

+?"getAdapter().getCount()=="?+?getAdapter().getCount());

if?(dragSrcPosition?==?getAdapter().getCount()?-?1

||?dragSrcPosition?==?getAdapter().getCount()?-?2)

{//?最后一條是footer,倒數第二條是數據

ViewGroup?itemView?=?(ViewGroup)?getChildAt(dragSrcPosition

-?getFirstVisiblePosition());

int?itemLeft?=?itemView.getLeft();

int?itemRight?=?itemView.getRight();

int?itemMid?=?(itemRight?+?itemLeft)?/?2;

FTLog.d(_TAG,?"itemLeft=="?+?itemLeft?+?",?itemRight="

+?itemRight?+?",itemMid="?+?itemMid);

if?(x?>?itemMid?-?60?&&?x?

bConsumeDown?=?true;//預處理,判斷是點擊觸發拖動的區域,并不攔截事件

return?false;

}

}

}

return?super.onInterceptTouchEvent(ev);

}

/**

*?觸摸事件

*/

@Override

public?boolean?onTouchEvent(MotionEvent?ev)?{

if?(bConsumeDown?==?true?&&?dragSrcPosition?!=?INVALID_POSITION)?{

//只有判斷是點擊觸發拖動的區域時,才進行處理。否則不處理,交予FTBounceListView舊邏輯處理。

int?action?=?ev.getAction();

switch?(action)?{

case?MotionEvent.ACTION_DOWN:

//FTLog.e("TMS===down==",?"tms");

//bConsumeDown?=?true;

break;

//case?MotionEvent.ACTION_MOVE:

//FTLog.e("TMS===move==",?"tms");

//if?(bConsumeDown?==?false)

//{

//super.onTouchEvent(ev);

//}

//break;

case?MotionEvent.ACTION_UP:

FTLog.d(_TAG,?"x="+ev.getX()+",y="+ev.getY());

if?(ev.getY()?

{//向上拖動距離超過20dip,才finish,動畫效果。

try?{

((Activity)?context).finish();

((Activity)?context).overridePendingTransition(

R.anim.move_bottom_in,?R.anim.move_top_out);

}?catch?(Exception?e)?{

e.printStackTrace();

}

}

break;

default:

break;

}

return?true;

}

return?super.onTouchEvent(ev);

}

以上重寫ViewGroup的兩個方法,對于具體的View來講,可以setOnTouchLinstener方法,再其OnTouch方法中,用mGestureDetectorOpen.onTouchEvent(event);來響應。

_imageview_room_op_item_open.setOnTouchListener(new?OnTouchListener()?{

@Override

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

mGestureDetectorOpen.onTouchEvent(event);

return?true;

}

});

mGestureDetectorOpen?=?new?GestureDetector(this,?new?OnGestureListener()

{

@Override

public?boolean?onFling(MotionEvent?e1,?MotionEvent?e2,?float?velocityX,

float?velocityY)?{//判斷在_imageview_room_op_item_open控件上移動的距離,do?something}

}

總結

以上是生活随笔為你收集整理的android layout 点击,Tips_Android点击事件(Down、Move、Up)的分发_重写Layout响应拖动事件...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 95久久 | 国产又粗又大又黄 | aaaa免费视频| 午夜动态图 | 色视频在线观看免费 | 日韩精品一区三区 | 丰满女人又爽又紧又丰满 | 强侵犯の奶水授乳羞羞漫虐 | 国产精品无码一区二区三区在线看 | 日本不卡中文字幕 | 国产片黄色 | 国产成人精品二区三区亚瑟 | 粉嫩在线| 午夜福利啪啪片 | 少妇精品亚洲一区二区成人 | 成年人激情网 | 亚洲欧美激情精品一区二区 | 成人三级做爰av | 免费成人在线电影 | 深夜影院深a | 一区视频在线播放 | 女18毛片 | 久久成人网18网站 | 懂色av一区二区三区 | 操极品美女 | 精品国产一区二区三区无码 | 国产偷怕 | 麻豆精品国产精华精华液好用吗 | 筱田优全部av免费观看 | 欧美激情性生活 | 日本精品视频在线播放 | 午夜精品久久久内射近拍高清 | 九九少妇| 日韩黄色在线播放 | gay男互凵gay男同偷精 | 18无码粉嫩小泬无套在线观看 | 三级网站在线播放 | 欧美激情亚洲综合 | 在线观看中文字幕视频 | 日本免费高清 | h视频在线观看网站 | 嫩草影院久久 | 国产老女人精品毛片久久 | 国产精品偷伦视频免费观看了 | 超碰成人福利 | 国产精品一区二区三区线羞羞网站 | 亚洲精品国产精品乱码视色 | 免费在线观看中文字幕 | 日本一二区视频 | 一本大道久久久久精品嫩草 | 老头吃奶性行交 | 岛国毛片在线观看 | www.香蕉视频在线观看 | 一区二区三区四区国产精品 | 婷婷第四色 | 青青草原综合久久大伊人精品 | 亚洲最大中文字幕 | 欧美精品亚洲精品日韩精品 | 日韩大尺度在线观看 | 息与子五十路翔田千里 | 久久精品人人爽 | 欧美激情黑白配 | 艳母动漫在线播放 | 亚洲国产精品狼友在线观看 | 国产一区二区三区四区三区四 | 国产成人免费在线观看 | 久久精品国产一区二区 | 一级淫片在线观看 | 欧美色综合色 | 欧美sm凌虐视频网站 | 日韩美女在线 | 91丝袜国产在线播放 | 内地毛片 | 温柔女教师在线观看 | 国产真实乱人偷精品人妻 | 亚洲国产天堂 | 日韩小视频网站 | 欧美亚洲 | 亚洲免费国产 | 国产精品视频导航 | 亚洲奶汁xxxx哺乳期 | 黄色大网站 | 国产一区二区福利 | 69精品在线观看 | 91在线网 | 精品国产一区二区三区在线观看 | 在线观看中文字幕一区 | 国产清纯白嫩初高中在线观看性色 | 96国产在线 | 欧美激情精品久久久久久 | 欧美激情第1页 | 国产毛片一区二区 | 精品人妻码一区二区三区红楼视频 | 天堂视频网 | 国产香蕉在线 | 人人爱人人插 | 国产欧美精品一区二区在线播放 | 免费三级黄色 | 捆绑裸体绳奴bdsm亚洲 |