如何使OnTouch()对单个视图作出反应

时间:2012-04-16 14:49:32

标签: android

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

<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之外,不应该吗?

致以最诚挚的问候,非常感谢。

1 个答案:

答案 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"/>