有些场景,需要一张图片部分可点击,这样就需要自己提前确定可响应点击范围。
这里以ImageVIEw 为例,讲一下部分可点击事件。
看下效果:
我这里一张顶部图片,有个输入框元素,如果元素要一个个叠加的话,会比麻烦,直接用一张图片做背景就比较省事,只要处理下 只响应输入框这一部分的点击效果。
首先布局文件中:
<com.xxx.Widget.PartClickImageVIEw androID:clickable="true" androID:ID="@+ID/vIEw_top_bg" androID:layout_wIDth="match_parent" androID:layout_height="185dp" androID:background="@drawable/bg_main_tab_top" />
ImageVIEw 通过重写 ontouchEvent 在ACTION_DOWN、ACTION_MOVE、ACTION_UP、ACTION_CANCEL中判断是否满足条件,满足条件可点击,否则不可响应点击效果。
public class PartClickImageVIEw extends ImageVIEw { private float x;//点击范围的左上角距离屏幕左侧的宽度 private float y;//点击范围的左上角距离屏幕顶部的高度 private float wIDth;//点击范围的宽度 private float height;//点击范围的高度 private boolean clickable = false; //点击事,如果移动范围在可接受范围内,可以响应点击事件 private int acceptRange = 0; private OnRangeClickListener onRangeClickListener; public voID setonRangeClickListener(OnRangeClickListener onRangeClickListener) { this.onRangeClickListener = onRangeClickListener; } //向外暴露的方法设置ImageVIEw的点击范围 public voID setClickRange(float x, float y, float wIDth, float height,int range) { this.x = x; this.y = y; this.wIDth = wIDth; this.height = height; acceptRange = range; } public PartClickImageVIEw(Context context) { super(context); } //给自定义的VIEw设置点击事件 public PartClickImageVIEw(Context context, AttributeSet attrs) { super(context, attrs); } public PartClickImageVIEw(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } float downX=0f,downY=0f; @OverrIDe public boolean ontouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: //0 downX = event.getX(); downY = event.getY(); clickable = true; break; case MotionEvent.ACTION_MOVE://2 float tempX = event.getX(); float tempY = event.getY(); if(Math.abs(tempX-downX)>acceptRange||Math.abs(tempY-downY)>acceptRange){ clickable = false; } break; case MotionEvent.ACTION_UP://1 float currentX = event.getX(); float currentY = event.getY(); if (clickable&¤tX > x && currentX < (x + wIDth) && currentY > y && currentY < (y + height)) { //在点击范围内,触发点击事件 onRangeClickListener.onClickImage(this); } break; case MotionEvent.ACTION_CANCEL://3 clickable = false; break; return super.ontouchEvent(event); } //重新定义图片的点击事件 public interface OnRangeClickListener { voID onClickImage(VIEw vIEw); }}
使用:
float x = 20*ScreenUtil.getScreenWIDth()/360; float y = 110*ScreenUtil.getScreenWIDth()/360; float wIDth = ScreenUtil.getScreenWIDth() - 2*x; float height = 50*ScreenUtil.getScreenWIDth()/360; //设置点击区域 holder.mVIEwtopBg.setClickRange(x,y ,wIDth,height,0); holder.mVIEwtopBg.setonRangeClickListener(new PartClickImageVIEw.OnRangeClickListener() { @OverrIDe public voID onClickImage(VIEw vIEw) { } });
如果你也热衷技术欢迎加群一起进步:230274309 。 一起分享,一起进步!少划水,多晒干货!!欢迎大家!!!(进群潜水者勿加) |
点击链接加入群聊【编程之美】:https://jq.qq.com/?_wv=1027&k=h75BfFCg
或者扫码
以上是内存溢出为你收集整理的Android可以响应局部、部分点击事件的View、ImageView全部内容,希望文章能够帮你解决Android可以响应局部、部分点击事件的View、ImageView所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)