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の境界は新しく拡大縮小された画像に自動的に調整されません。このために、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 に答える