一、说明
笔记主要是记录一些本人在开发当中的学习和使用笔记。笔记内容包含一些本人觉得重要的知识点、本人易犯的错误等。
由于本人水平有限,其中出现的错误或者不合理的地方望各位读者多多包含,并指出其中不合理和错误的地方,以便我来修改正。谢谢!
二、笔记时间
2019年06月28日
三、简述
本文主要记录如何在 ImageView 限制某个区域响应点击事件。
四、详情
在我们的开发当中,往往出现 ImageView 区域较大,但是点击事件却要比 ImageView 区域小。这种情况就需要我们自定义点击事件的触发区域了。
在实际开发当中,我们项目有一个类似需求,就是点击 ImageView 图片资源响应点击事件,点击 ImageView 的其它地方不响应点击事件。我对点击事件进行了分发管理,下面是我的代码:
public class ClickImageView extends AppCompatImageView {
public ClickImageView(Context context) {
super(context);
}
public ClickImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
return isClick(event);
case MotionEvent.ACTION_UP:
if (isClick(event)) {
performClick();
}
break;
default:
break;
}
return super.dispatchTouchEvent(event);
}
/**
* 触摸位置是否允许响应点击事件
*
* @param event
* @return
*/
private boolean isClick(MotionEvent event) {
if (event.getPointerCount() != 1) {
return false;
}
float[] values = new float[9];
getMatrix().getValues(values);
if (event.getX() < values[2] || event.getX() > (values[2] + getDrawable().getIntrinsicWidth())) {
return false;
}
if (event.getY() < values[5] || event.getY() > (values[5] + getDrawable().getIntrinsicHeight())) {
return false;
}
return true;
}
}
代码中有个需要注意的地方,就是我们用到了 Matrix,这个 Matrix 保存了 View 的一些坐标信息,其中 values[2] 就是 X 坐标,values[5] 就是 Y 坐标。
网友评论