2

我有一个非常简单的布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >

    <ImageView
    android:id="@+id/board"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/boardmask" />

</LinearLayout>

和一个非常简单的活动:

public class BoardActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.board_activity);
    ImageView board = (ImageView) findViewById(R.id.board);
    board.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_UP) {
                Log.i("OnTouch", event.getX() + " " + event.getY());
            }
            return true;
        }
    });
  }
}

ImageView 大约是屏幕垂直的一半,并且居中。有人可以解释为什么单击屏幕顶部或底部会生成 OnTouch 事件,它应该不在 ImageView 之外,不是吗?

最好的问候,非常感谢你。

4

1 回答 1

0

我经常看到这种情况发生,但我没有找到谷歌在哪里解释了这一点。我将尝试解释我是如何理解它的。

当您添加 ImageView 并为其提供源时,或稍后以编程方式添加图像时,ImageView 会根据图像的尺寸调整自身的大小。但是有时当源图像大于屏幕尺寸时,它会根据 scaleType(如果提供)进行缩放,或者只是缩放图像,使最大的一侧完全适合屏幕,而另一侧则在保持尺寸不变的情况下进行缩放。

但是图片插入ImageView后,ImageView的Bounds并没有自动调整为新缩放的图片。为此,ImageView 中有另一个参数称为android:adjustViewBounds

因此,请尝试在您的 Imageview 中执行此操作。

<ImageView
android:id="@+id/board"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/boardmask" 
android:adjustViewBounds="true"/>
于 2012-04-17T01:14:41.637 回答