多个图叠加,解决点击事件穿透,onTouch事件拦截但是响应点击事件
来源:互联网 发布:mac 内录 编辑:程序博客网 时间:2024/05/22 09:49
公司开发中遇到在地图上显示图片,并且图片有点击事件的需求,但是你点击图片的时候下面的地图也跟着变化,发生事件透传,所以写了这么一个自定义的ImageView;
1.首先定义一个类继承自ImageView,初始化构造器
public class NoTouchImageView extends ImageView{ public OnMyClickListener listener;public NoTouchImageView(Context context) {super(context);// TODO Auto-generated constructor stub}public NoTouchImageView(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stub}public NoTouchImageView(Context context, AttributeSet attrs,int defStyleAttr) {super(context, attrs, defStyleAttr);// TODO Auto-generated constructor stub}
2、重写onTouch事件,主要进行拦截事件分发操作
//重写onTouch事件@Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getAction()) { case MotionEvent.ACTION_DOWN: //按下 Drawable drawable = getDrawable(); if (drawable != null) { //设置成灰色效果 drawable.mutate().setColorFilter(Color.GRAY, PorterDuff.Mode.MULTIPLY); } break; case MotionEvent.ACTION_MOVE: //移动 break; case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_UP: //抬起 Drawable drawableUp = getDrawable(); //恢复正常 if (drawableUp != null) { drawableUp.mutate().clearColorFilter(); } listener.onMyClick(this); //调用方法 break; } return true; //重点是这里,返回true表示消费了此事件不在往下传递了}
3、定义接口,用来响应该Imageview的点击事件,并在上方*MotionEvent.ACTION_UP时调用*
//定义一个接口public interface OnMyClickListener { void onMyClick(View var1); }}
4、设置set方法,传入listener
public void setOnMyClick(OnMyClickListener ll) { listener=ll; }
5、使用
//点击事件notouchImageview.setOnMyClick(new OnMyClickListener() { @Override public void onMyClick(View var1) { Toast。。。。。。。。。。 }});
6、完整代码
package com.xxx;import android.content.Context;import android.graphics.Color;import android.graphics.PorterDuff;import android.graphics.drawable.Drawable;import android.support.v4.widget.SearchViewCompat.OnCloseListenerCompat;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;import android.widget.ImageView;/** * 拦截事件传递,并且相应点击事件 * auther cgq * */public class NoTouchImageView extends ImageView{ public OnMyClickListener listener; public NoTouchImageView(Context context) { super(context); // TODO Auto-generated constructor stub } public NoTouchImageView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } public NoTouchImageView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); // TODO Auto-generated constructor stub } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: Drawable drawable = getDrawable(); if (drawable != null) { drawable.mutate().setColorFilter(Color.GRAY, PorterDuff.Mode.MULTIPLY); } break; case MotionEvent.ACTION_MOVE: break; case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_UP: Drawable drawableUp = getDrawable(); if (drawableUp != null) { drawableUp.mutate().clearColorFilter(); } listener.onMyClick(this); break; } return true; } public void setOnMyClick(OnMyClickListener ll) { listener=ll; } public interface OnMyClickListener { void onMyClick(View var1); }}
这个是比较简单的自定义view,希望对有需要的人有帮助。
感谢生活、感谢科技、感谢分享,cgq!
阅读全文
0 0
- 多个图叠加,解决点击事件穿透,onTouch事件拦截但是响应点击事件
- OnTouch点击事件
- iOS 事件穿透,点击穿透,控件不响应事件
- uiview点击事件穿透
- android点击事件穿透
- DrawerLayout 点击事件穿透
- DrawerLayout 点击穿透事件
- 点击按钮事件穿透
- SlidingPaneLayout点击事件穿透
- 解决布局点击事件穿透的问题
- 解决抽屉点击事件穿透问题
- 解决布局点击事件穿透的问题
- 解决点击事件穿透的问题
- jquery点击事件重复/叠加
- Layout拦截点击事件
- UIImageView响应点击事件
- UIImageView响应点击事件
- UIImageView响应点击事件
- html页面左侧广告悬浮窗
- 微信小程序的几个兼容问题
- 如何使用Jenkins的public over SSH插件连接应用服务器
- Python图表绘制:matplotlib绘图库入门
- RDD的5大特性
- 多个图叠加,解决点击事件穿透,onTouch事件拦截但是响应点击事件
- MongoDB简介
- 《用Python玩转数据》scikit-learn机器学习经典入门项目
- java堆栈、String、常量池分析
- Redis调用lua脚本
- 定时器
- Opencv Qt 学习笔记(三) 级联器的训练
- maven工程中为什么要在pom.xml中配置tomcat插件
- java中utc时间怎么转换为本地时间?