Android可以响应局部、部分点击事件的View、ImageView

Android可以响应局部、部分点击事件的View、ImageView,第1张

概述有些场景,需要一张图片部分可点击,这样就需要自己提前确定可响应点击范围。这里以ImageView为例,讲一下部分可点击事件。看下效果:我这里一张顶部图片,有个输入框元素,如果元素要一个个叠加的话,会比麻烦,直接用一张图片做背景就比较省事,只要处理下只响应输入框这一部分的点击效

有些场景,需要一张图片部分可点击,这样就需要自己提前确定可响应点击范围。
这里以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&&currentX > 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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1038133.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存