Android 安卓:如何减少可点击的视域?

Android 安卓:如何减少可点击的视域?,android,Android,我有两个图像,它们的透明区域相互重叠。当我点击 一个映像调用另一个映像的onclicklistener。是否仍然可以减少ImageView的可点击区域。您创建了一个: 参考,您只能使用xml解决它。只需将您的图像放在一个框架中,然后放置另一个透明视图,您可以将其连接到上面的单击事件。使用布局参数调整大小和位置: <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content">

我有两个图像,它们的透明区域相互重叠。当我点击 一个映像调用另一个映像的onclicklistener。是否仍然可以减少ImageView的可点击区域。

您创建了一个:


参考

,您只能使用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;
    }
});