7

私がやっているのは非常に単純なことです。以前にやったことがありますが、今は期待どおりに動作していません。とにかく、私がやろうとしていることと私が得ていることを簡単に説明しましょう::

シナリオ:: が配置されている があります。次のように設定しRelativeLayoutます。ImageViewtouchlistenerimageview.setOnTouchListener(this);

onTouch(View v,MotionEvent event)私が行った関数をオーバーライドするように求められました...そして、 xyAction_Moveを取得し、それらを左と上の余白に追加することで、画像を移動しています。

奇妙な問題:ImageViewは動いていますが、右方向に動いている場合のように、非常に顕著な揺れを伴い、右側に移動しますImageViewが、途中で左側に戻るため、画像が安定していないように見え、振動しています. . そのようなもの.. 私が得たxylogを与えています... これがあなたにアイデアを与えることを願っています.

ACTION_DOWN[#0(pid 0)=160,233]  Going right..
ACTION_MOVE[#0(pid 0)=160,233]  ////
ACTION_MOVE[#0(pid 0)=160,233]  //
ACTION_MOVE[#0(pid 0)=174,231]  //
ACTION_MOVE[#0(pid 0)=176,233]  //
ACTION_MOVE[#0(pid 0)=196,232]  //
ACTION_MOVE[#0(pid 0)=152,232]  // suddenly i got 152 as location for x... image comes     back
ACTION_MOVE[#0(pid 0)=167,232]  // again started to go right
ACTION_MOVE[#0(pid 0)=180,233]  // going right
ACTION_MOVE[#0(pid 0)=173,233]  // again comes a little back
ACTION_MOVE[#0(pid 0)=187,232]  // same thing goes till end..
ACTION_MOVE[#0(pid 0)=159,232]
ACTION_MOVE[#0(pid 0)=174,231]
ACTION_MOVE[#0(pid 0)=177,233]
ACTION_MOVE[#0(pid 0)=189,231]
ACTION_MOVE[#0(pid 0)=155,232]
ACTION_MOVE[#0(pid 0)=171,231]
ACTION_MOVE[#0(pid 0)=183,230]
ACTION_MOVE[#0(pid 0)=161,234]
ACTION_MOVE[#0(pid 0)=171,233]
ACTION_MOVE[#0(pid 0)=174,230]
ACTION_MOVE[#0(pid 0)=183,230]
ACTION_MOVE[#0(pid 0)=162,234]
ACTION_MOVE[#0(pid 0)=170,233]
ACTION_MOVE[#0(pid 0)=176,233]
ACTION_MOVE[#0(pid 0)=165,233]
ACTION_MOVE[#0(pid 0)=175,232]
ACTION_MOVE[#0(pid 0)=163,233]
ACTION_MOVE[#0(pid 0)=171,233]
ACTION_MOVE[#0(pid 0)=167,233]
ACTION_MOVE[#0(pid 0)=172,232]
ACTION_MOVE[#0(pid 0)=178,232]
ACTION_MOVE[#0(pid 0)=158,234]
ACTION_MOVE[#0(pid 0)=170,234]
ACTION_MOVE[#0(pid 0)=170,232]
ACTION_MOVE[#0(pid 0)=177,231]
ACTION_MOVE[#0(pid 0)=157,234]
ACTION_MOVE[#0(pid 0)=160,234]
ACTION_MOVE[#0(pid 0)=169,232]
ACTION_MOVE[#0(pid 0)=165,233]
ACTION_MOVE[#0(pid 0)=167,233]
ACTION_MOVE[#0(pid 0)=159,233]
ACTION_UP  [#0(pid 0)=161,233]

RelativeLayout の XML コード:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:background="#99000000">

    <ImageView
        android:id="@+id/imageview"
        android:layout_width="400dp"
        android:layout_height="400dp"
        android:layout_marginLeft="100dp"
        android:layout_marginTop="100dp"
        android:scaleType="matrix" />
</RelativeLayout>

それで、これが最大です。質問を説明できますが、何か必要な場合はお知らせください。

更新::ImageViewコンテナ内 を移動するためのコード、つまりRelativeLayout:

case MotionEvent.ACTION_MOVE:
            LayoutParams params = (LayoutParams) imageview.getLayoutParams();

            params.leftMargin = params.leftMargin + x;
            params.topMargin = params.topMargin + y;

            imageview.setLayoutParams(params);
            break;
4

2 に答える 2

5

の X および Y 変数は、アタッチonTouchされているビューに相対的な X および Yです。onTouchListener10, 10 は の左上ImageViewからRelativeLayout.

これらの値を使用して移動するImageViewと、自然に不安定な動作が発生します。各移動アクションは、わずかに異なる OnTouchEvent を起動し、別の移動アクションを引き起こします。この再帰により、「振動」効果が得られます。

于 2012-07-20T09:55:55.220 に答える