我有两个图像,其透明区域相互重叠。我点击的时候 一个图像,另一个图像的onclicklistener被调用。无论如何都要减少ImageView的可点击区域。
答案 0 :(得分:2)
您创建了TouchDelegate
:
final View parent = (View) findViewById(R.id.touch_delegate_root);
parent.post( new Runnable() {
// Post in the parent's message queue to make sure the parent
// lays out its children before we call getHitRect()
public void run() {
final Rect rect = new Rect();
Button delegate = YourActivityClass.this.mButton;
delegate.getHitRect(rect);
rect.top -= 20;
rect.bottom += 12; // etc
parent.setTouchDelegate( new TouchDelegate( rect , delegate));
}
});
引自here
答案 1 :(得分:1)
您只能使用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>
答案 2 :(得分:0)
不要使用OnClickListener,而是使用OnTouchListener并自行处理点击区域。
例如,通过缩放触摸矩形并将其平移到视图的中心。 您也可以使用半径或手动偏移。
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;
}
});