1

タッチすると画像が移動しようとしています。画像を動かしていると、おかしなことが起こることに気付きました (うまく動くときもあれば、別の場所に移動するときもあります)。getX 値を使用して Log.d を作成したところ、次のようになりました。

 03-16 19:26:23.569: D/eventX:(15450): 23.0
 03-16 19:26:23.599: D/eventX:(15450): 91.0
 03-16 19:26:23.629: D/eventX:(15450): 20.0
 03-16 19:26:23.659: D/eventX:(15450): 89.0
 03-16 19:26:23.689: D/eventX:(15450): 17.0
 03-16 19:26:23.719: D/eventX:(15450): 87.0
 03-16 19:26:23.749: D/eventX:(15450): 14.0
 03-16 19:26:23.779: D/eventX:(15450): 85.0
 03-16 19:26:23.809: D/eventX:(15450): 11.0
 03-16 19:26:23.839: D/eventX:(15450): 83.0
 03-16 19:26:23.879: D/eventX:(15450): 8.0

ご覧のとおり、1 つは良い値 (私が触れた位置の値) であり、もう 1 つは意味をなさないものです。誰かがその理由を知っていますか?

これが私が使用しているコードの平和です...

  head.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View arg0, MotionEvent ev) {
            // TODO Auto-generated method stub
            switch (ev.getAction()) {


            case MotionEvent.ACTION_MOVE: {
                RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(head.getLayoutParams().width, head.getLayoutParams().height);
                Log.d("eventX:", ((Float)ev.getX()).toString());
                layoutParams.leftMargin = (int) ev.getX();
                head.setLayoutParams(layoutParams);
                count = false;

                break;
            }
4

1 に答える 1

3

典型的なgetX()関数の使用は、 をディスパッチした特定のビューに完全に関連付けられてMotionEventおり、そのビューに相対的な座標を返します。あなたの場合、複数のビューがイベントをディスパッチしている可能性が高く、複数の予期しない値を取得しています。

いずれにせよ、 を使用getRawX()すると、一貫した絶対座標を取得でき、すべての異なる座標の混乱を解決できます。

于 2013-03-16T21:36:52.033 に答える