热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

有些场景,需要一张图片部分可点击,这样就需要自己提前确定可响应点击范围。这里以ImageView为例,讲一下部分可点击事件。看下效果:我这里一张顶部图片,有个输入框元素,如果元素要



有些场景,需要一张图片部分可点击,这样就需要自己提前确定可响应点击范围。
这里以ImageView 为例,讲一下部分可点击事件。

看下效果:
我这里一张顶部图片,有个输入框元素,如果元素要一个个叠加的话,会比麻烦,直接用一张图片做背景就比较省事,只要处理下 只响应输入框这一部分的点击效果。

在这里插入图片描述

首先布局文件中:

android:clickable="true"
android:id="@+id/view_top_bg"
android:layout_
android:layout_
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

或者扫码
在这里插入图片描述



推荐阅读
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • EPPlus绘制刻度线的方法及示例代码
    本文介绍了使用EPPlus绘制刻度线的方法,并提供了示例代码。通过ExcelPackage类和List对象,可以实现在Excel中绘制刻度线的功能。具体的方法和示例代码在文章中进行了详细的介绍和演示。 ... [详细]
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
  • 使用C++编写程序实现增加或删除桌面的右键列表项
    本文介绍了使用C++编写程序实现增加或删除桌面的右键列表项的方法。首先通过操作注册表来实现增加或删除右键列表项的目的,然后使用管理注册表的函数来编写程序。文章详细介绍了使用的五种函数:RegCreateKey、RegSetValueEx、RegOpenKeyEx、RegDeleteKey和RegCloseKey,并给出了增加一项的函数写法。通过本文的方法,可以方便地自定义桌面的右键列表项。 ... [详细]
author-avatar
路啦Nantale
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有