激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Android - 淺談Android onTouchEvent 與 onInterceptTouchEvent的區別詳解

淺談Android onTouchEvent 與 onInterceptTouchEvent的區別詳解

2021-01-10 14:20Android開發網 Android

本篇文章小編為大家介紹,Android onTouchEvent 與 onInterceptTouchEvent的區別詳解。需要的朋友參考下

首先從字面意思理解兩個詞

ontouchevent:觸發觸摸事件

onintercepttouchevent:觸發攔截觸摸事件

通過查看源代碼及類繼承關系

onintercepttouchevent:是定義于viewgroup里面的一個方法,此事件是用于攔截觸摸事件的,viewgroup(繼承自view),一個view的group,也就是我們的一個布局如linerlayout,各個布局類都繼承自viewgroup;

ontouchevent:是定義于view中的一個方法,處理傳遞到view的手勢觸摸事件。手勢事件類型包括action_down,action_move,action_up,action_cancel等事件;

其中viewgroup里的onintercepttouchevent默認返回值是false,這樣touch事件會傳遞到view控件,viewgroup里的ontouchevent默認返回值是false;

view里的ontouchevent默認返回值是true,當我們手指點擊屏幕時候,先調用action_down事件,當ontouchevent里返回值是true的時候,ontouch會繼續調用action_up事件,如果ontouchevent里返回值是false,那么ontouchevent只會調用action_down而不調用action_up。

1、新建兩個類llayout , lview 如下

復制代碼 代碼如下:

public class llayout extends framelayout {
 // viewgroup
 @override
 public boolean onintercepttouchevent(motionevent ev) {
  log.i("ltag", "llayout onintercepttouchevent");
  log.i("ltag", "llayout onintercepttouchevent default return" + super.onintercepttouchevent(ev));
  return super.onintercepttouchevent(ev);
 }
 // view
 @override
 public boolean ontouchevent(motionevent event) {
  log.i("ltag", "llayout ontouchevent");
  log.i("ltag", "llayout ontouchevent default return" + super.ontouchevent(event));
  return super.ontouchevent(event);
 }
}
public class lview extends button {
 // textview <-- view
 @override
 public boolean ontouchevent(motionevent event) {
  log.i("ltag", "ontouchevent");
  log.i("ltag", "ontouchevent default return" + super.ontouchevent(event));
  return super.ontouchevent(event);
 }
}


 2、修改布局文件為如下布局
 

復制代碼 代碼如下:

 <com.touchpro.llayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent" >
  <com.touchpro.lview
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/app_name" />
</com.touchpro.llayout>


(1)先點擊界面中的按鈕
淺談Android onTouchEvent 與 onInterceptTouchEvent的區別詳解
(2)再點擊界面中的其它區域
淺談Android onTouchEvent 與 onInterceptTouchEvent的區別詳解
結論:llayout 中 onintercepttouchevent 默認返回值為false,ontouchevent 默認返回值為false,所以只調用了action_down事件;

 

lview中 ontouchevent 默認返回值為true;調用了action_down,action_up 兩個事件;

(3)修改llayout中onintercepttouchevent返回值為true,再次運行代碼:
淺談Android onTouchEvent 與 onInterceptTouchEvent的區別詳解
結論:llayout中onintercepttouchevent返回了true,對觸摸事件進行了攔截,所以沒有將事件傳遞給view,而直接執行了llayout中的ontouchevent事件;

(4)把llayout中onintercepttouchevent返回值改為false,再把lview中的ontouchevent改為返回false:
淺談Android onTouchEvent 與 onInterceptTouchEvent的區別詳解
結論:由于將lview中ontouchevent返回值修改為false,因此只執行了action_down,然后就到llayout中執行ontouchevent事件了;

viewgroup里的onintercepttouchevent默認值是false這樣才能把事件傳給view里的ontouchevent.

viewgroup里的ontouchevent默認值是false。

view里的ontouchevent返回默認值是true.這樣才能執行多次touch事件。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 最新久久免费视频 | 综合国产在线 | 久久精品视频一区 | 亚洲国产超高清a毛毛片 | 日本网站一区 | 康妮卡特欧美精品一区 | 黄色免费不卡视频 | 懂色粉嫩av久婷啪 | 国产羞羞视频 | 欧美精品一区二区中文字幕 | av在线一区二区三区四区 | 中文字幕在线资源 | 羞羞漫画无遮挡观看 | 欧美性生活视频免费看 | 久久一级 | 日韩蜜桃视频 | 91av在线免费 | 国产亚洲精品久久 | 综合成人在线 | 国内精品伊人久久 | 天天草天天爱 | 九九热视频在线免费观看 | 黑人三级毛片 | 色吧久久 | 在线成人精品视频 | 国产一级一区二区三区 | 黄色网址进入 | 免费看性xxx高清视频自由 | 欧美日韩视频第一页 | 成人视屏网站 | 在线影院av | 色操网| 欧美一区二区三区中文字幕 | 日本在线看片 | 国产精品成人久久 | 操操影视 | 欧美成在人线a免费 | 护士hd欧美free性xxxx | 久久成人黄色 | 性插视频| wwwxxx免费视频 |