我有一个非常简单的布局:
<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之外,不应该吗?
致以最诚挚的问候,非常感谢。
答案 0 :(得分:0)
我已经看到这种情况经常发生,我还没有找到谷歌在哪里解释这一点。我会试着解释一下我是如何理解它的。
当您添加ImageView并为其提供源或稍后以编程方式添加图像时,ImageView会根据图像的尺寸调整自身的大小。但有时当源图像大于屏幕尺寸时,它会根据scaleType(如果提供)进行缩放,或者只是缩放图像,使最大边完全适合屏幕,另一边按比例缩放以保持尺寸不变。
但是在将图像插入ImageView后,ImageView的边界不会自动调整为新缩放的图像。为此,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"/>