Android 安卓:如何减少可点击的视域?
我有两个图像,它们的透明区域相互重叠。当我点击 一个映像调用另一个映像的onclicklistener。是否仍然可以减少ImageView的可点击区域。您创建了一个:Android 安卓:如何减少可点击的视域?,android,Android,我有两个图像,它们的透明区域相互重叠。当我点击 一个映像调用另一个映像的onclicklistener。是否仍然可以减少ImageView的可点击区域。您创建了一个: 参考,您只能使用xml解决它。只需将您的图像放在一个框架中,然后放置另一个透明视图,您可以将其连接到上面的单击事件。使用布局参数调整大小和位置: <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content">
参考,您只能使用xml解决它。只需将您的图像放在一个框架中,然后放置另一个透明视图,您可以将其连接到上面的单击事件。使用布局参数调整大小和位置:
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView android:id="your_view"
android:clickable="false"
<!-- your other attributes -->
<!-- ... -->
/>
<ImageView android:id="the_clickable_view"
android:src="@null"
<!-- set desired size of clickable area -->
<!-- align it inside a frame using:
android:gravity and android:margins -->
/>
</FrameLayout>
/>
/>
不要使用OnClickListener,而是自己处理单击区域
例如,缩放触摸矩形并将其平移到视图中心。
也可以使用半径或手动偏移
imageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
final Rect rect = new Rect();
v.getHitRect(rect);
float scale = 0.5f;
final float x = event.getX();
final float y = event.getY();
final float minX = v.getWidth() * 0.5f * (1.0f - scale);
final float maxX = v.getWidth() * 0.5f * (1.0f + scale);
final float minY = v.getHeight() * 0.5f * (1.0f - scale);
final float maxY = v.getHeight() * 0.5f * (1.0f + scale);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (x > minX && x < maxX && y > minY && y < maxY) {
Log.d("TOUCH", String.valueOf(x) + " " + String.valueOf(y));
}
break;
}
return true;
}
});
imageView.setOnTouchListener(新视图.OnTouchListener(){
@凌驾
公共布尔onTouch(视图v,运动事件){
final Rect Rect=新Rect();
v、 getHitRect(rect);
浮标度=0.5f;
最终浮点x=event.getX();
最终浮点y=event.getY();
最终浮点最小值=v.getWidth()*0.5f*(1.0f-刻度);
最终浮点最大值=v.getWidth()*0.5f*(1.0f+刻度);
最终浮动最小值=v.getHeight()*0.5f*(1.0f-刻度);
最终浮点最大值=v.getHeight()*0.5f*(1.0f+刻度);
开关(event.getAction()){
case MotionEvent.ACTION\u DOWN:
如果(x>minX&&xminY&&y
使用您的方法,我可以增加可触摸区域,但无法减少区域。因为所需的不可点击区域是“透明”区域(我假设这意味着它不在可绘制区域内)您甚至可以放弃添加的视图,只需添加解决它的FrameLayout即可-使用FrameLayout上的原始布局属性,而不是ImageView,并使ImageView只按您希望的大小进行单击。
imageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
final Rect rect = new Rect();
v.getHitRect(rect);
float scale = 0.5f;
final float x = event.getX();
final float y = event.getY();
final float minX = v.getWidth() * 0.5f * (1.0f - scale);
final float maxX = v.getWidth() * 0.5f * (1.0f + scale);
final float minY = v.getHeight() * 0.5f * (1.0f - scale);
final float maxY = v.getHeight() * 0.5f * (1.0f + scale);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (x > minX && x < maxX && y > minY && y < maxY) {
Log.d("TOUCH", String.valueOf(x) + " " + String.valueOf(y));
}
break;
}
return true;
}
});