Android App开发触摸事件中手势事件Event的分发流程讲解与实战(附源码 简单易懂)
创始人
2024-01-29 13:35:47
0

需要源码或运行有问题请点赞关注收藏后评论区留言~~~

一、手势事件的分发流程

智能手机的一大革命性技术就是把屏幕变为可触摸设备,既可用于信息输入也可以用于信息输出。与手势事件有关的方法主要有以下三个

dispatchTouchEvent  进行事件分发处理 返回结果表示该事件是否需要分发

onInterceptTouchEvent  进行事件拦截处理 返回结果表示当前容器是否需要拦截该处理

onTouchEvent  进行事件触摸事件 返回结果表示该事件是否处理完毕

上述手势方法的执行者有三个

页面类  包括Activity及其派生类

容器类  包括从ViewGroup派生出的各类容器

控件类  包括从View类派生的各类控件

处理流程如下

 

经过上图的分析,常见的手势处理方法可以总结为以下三种

页面类的dispatchTouchEvent 控制事件的分发 决定把手势交给谁处理

容器类的onInterceptTouchEvent  控制事件的拦截 决定是否要把手势交给子视图处理

控件类的onTouchEvent 进行手势处理的具体处理 

 下面是对不派发事件的处理效果

点击按钮后即会出现相应效果

 

 下面是拦截事件的处理效果

 代码如下

Java类

package com.example.event;import com.example.event.util.DateUtil;
import com.example.event.widget.NotDispatchLayout;
import com.example.event.widget.NotDispatchLayout.NotDispatchListener;import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import android.widget.TextView;public class EventDispatchActivity extends AppCompatActivity implements NotDispatchListener {private TextView tv_dispatch_yes; // 声明一个文本视图对象private TextView tv_dispatch_no; // 声明一个文本视图对象private String desc_yes = "", desc_no = "";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_event_dispatch);tv_dispatch_yes = findViewById(R.id.tv_dispatch_yes);tv_dispatch_no = findViewById(R.id.tv_dispatch_no);NotDispatchLayout ndl_no = findViewById(R.id.ndl_no);// 设置不分发布局的事件分发监听器ndl_no.setNotDispatchListener(this);findViewById(R.id.btn_dispatch_yes).setOnClickListener(v -> {desc_yes = String.format("%s%s 您点击了按钮\n", desc_yes, DateUtil.getNowTime());tv_dispatch_yes.setText(desc_yes);});findViewById(R.id.btn_dispatch_no).setOnClickListener(v -> {desc_no = String.format("%s%s 您点击了按钮\n", desc_no, DateUtil.getNowTime());tv_dispatch_no.setText(desc_no);});}// 在分发触摸事件时触发@Overridepublic void onNotDispatch() {desc_no = String.format("%s%s 触摸动作未分发,按钮点击不了了\n", desc_no, DateUtil.getNowTime());tv_dispatch_no.setText(desc_no);}}

拦截事件类

package com.example.event;import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import android.widget.TextView;import com.example.event.util.DateUtil;
import com.example.event.widget.InterceptLayout;
import com.example.event.widget.InterceptLayout.InterceptListener;public class EventInterceptActivity extends AppCompatActivity implements InterceptListener {private TextView tv_intercept_no; // 声明一个文本视图对象private TextView tv_intercept_yes; // 声明一个文本视图对象private String desc_no = "", desc_yes = "";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_event_intercept);tv_intercept_no = findViewById(R.id.tv_intercept_no);tv_intercept_yes = findViewById(R.id.tv_intercept_yes);InterceptLayout il_yes = findViewById(R.id.il_yes);// 设置拦截布局的事件拦截监听器il_yes.setInterceptListener(this);findViewById(R.id.btn_intercept_no).setOnClickListener(v -> {desc_no = String.format("%s%s 您点击了按钮\n", desc_no, DateUtil.getNowTime());tv_intercept_no.setText(desc_no);});findViewById(R.id.btn_intercept_yes).setOnClickListener(v -> {desc_yes = String.format("%s%s 您点击了按钮\n", desc_yes, DateUtil.getNowTime());tv_intercept_yes.setText(desc_yes);});}// 在拦截触摸事件时触发@Overridepublic void onIntercept() {desc_yes = String.format("%s%s 触摸动作被拦截,按钮点击不了了\n", desc_yes,DateUtil.getNowTime());tv_intercept_yes.setText(desc_yes);}}

XML文件

拦截事件的XML文件

创作不易 觉得有帮助请点赞关注收藏~~~

相关内容

热门资讯

抗战影像记忆|这些影像,让世界...   1939年7月,美国《生活》(LIFE)杂志刊发了一组珍贵的新四军抗战影像,向世界展现了中国共产...
三种颜色,解码机遇中国   一片绿、一抹白、一把红,如何展现一个充满生机的贵州?  7月15日至18日,2025“机遇中国 ...
11.7%、5000亿元、8....   央视网消息:记者从商务部了解到,今年前6个月,全国新设立外商投资企业30014家,同比增长11....
“链通”创未来丨“对各方来说这...   以“链接世界、共创未来”为主题的第三届中国国际供应链促进博览会(链博会)7月16日至20日在北京...
舌尖上的消暑佳品唤醒盛夏记忆 ...   央视网消息:闷热天气里,最适合吃点清爽开胃的东西。我们国家幅员辽阔,每个地方都有自己独特的夏日美...
铭记历史 缅怀先烈|萨师俊:誓...   在福州市中心的安泰河畔,静谧祥和的巷弄里,朱紫坊22号萨家大院饱经沧桑。叩开红漆大门,挂在厅堂里...
青峰翠壑、奇松怪石、碧海银沙…...   央视网消息:盛夏时节,一起来感受大美中国。近日,在安徽黄山风景区,一场大雨之后,突现彩虹美景。雨...
上半年国家铁路发送货物19.8...   新华社北京7月20日电(记者樊曦)记者20日从中国国家铁路集团有限公司获悉,今年上半年,国家铁路...
人民网评:以工匠精神照亮中小企...   中小企业联系千家万户,是推动创新、促进就业、改善民生的重要力量。日前,全国总工会、工业和信息化部...
人民财评:链博会逐“绿”向“新...   世界500强和行业龙头企业占比超过65%,首发首秀首展超过100项……第三届中国国际供应链促进博...