2010-11-28 11 views
1

画面上でImageViewをドラッグするために、次の関数を記述しました。イメージをドラッグして狂ったように飛び回る間を除いて、問題なく動作しているようです。AndroidでRelativeLayoutを使用したonTouchListenerの奇妙なジャンプ値

ログを見ると、正しい値の間にXとYの値が正しくないようです。私はなぜそう思うかわからない。誰でもこの問題を解決する手助けができますか?ログ出力の

hereOnTouchListener imageListener = new OnTouchListener(){ 

@Override 
public boolean onTouch(View v, MotionEvent event) { 

    // TODO Auto-generated method stub 
    int eventAction = event.getAction(); 

    int X = (int)event.getX(); 
    int Y = (int)event.getY(); 
    if (eventAction == MotionEvent.ACTION_DOWN){ 
    dragging = true; 
    tempParams = new RelativeLayout.LayoutParams(v.getWidth(), v.getHeight()); 
Log.i("v width and height", v.getWidth() + " " + v.getHeight()); 
    }  
    if (eventAction == MotionEvent.ACTION_UP){ 
    Log.i("dragging up","dragging up" + X + " " + Y); 
    dragging = false; 
    } else if (eventAction == MotionEvent.ACTION_MOVE){ 
    if (dragging){ 
    Log.i("dragging","dragging " + X + " " + Y); 
    tempParams.leftMargin = X; 
    tempParams.topMargin = Y; 
    v.setLayoutParams(tempParams); 
    // v.setPadding(X, Y, 0, 0); 
    v.invalidate(); 
    } 
    } 


    return true; 
} 

}; 

サンプル:

11-27 19:43:34.484: INFO/dragging(3530): dragging 131 131 
11-27 19:43:34.504: INFO/dragging(3530): dragging 84 288 
11-27 19:43:34.519: INFO/dragging(3530): dragging 132 134 
11-27 19:43:34.539: INFO/dragging(3530): dragging 84 292 
11-27 19:43:34.554: INFO/dragging(3530): dragging 132 139 
11-27 19:43:34.574: INFO/dragging(3530): dragging 84 294 
11-27 19:43:34.594: INFO/dragging(3530): dragging 132 142 
11-27 19:43:34.609: INFO/dragging(3530): dragging 84 294 
+0

可能でしょうか。あなたの質問をより読みやすくするために再フォーマットしてください。 –

答えて

0

は、最後にそれを考え出しました。問題は私がevent.getX()を使用していたので、私は指でドラッグしていたときにImageViewと基底サーフェスに基づいて値を計算していたと思います。

+3

この問題をどうやって解決しましたか? – I82Much

0

実際には、onTouchListenerが設定されている同じビューの余白を変更しているため、これが発生しています。これを避けるには、別のビューを使用する必要があります。一方のビューはonTouchListenerからgetX()またはgetY()を取得し、その情報を使用して別のビューのマージンを変更する必要があります。 I82Much @

<FrameLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 

    <RelativeLayout 
     android:id="@+id/content" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 
     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"/> 
    </RelativeLayout> 

    <RelativeLayout 
     android:id="@+id/touch_listener" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 
</FrameLayout> 
+0

これを試してみると、役に立たないようです。内部にImageViewを持つRelativeLayoutがあり、ImageViewにonTouchListenerがあります。それはまだまだ不安定です。 –

+0

@dpk - ImageViewがタッチを傍受しているRelativeLayoutの内側にあるため、これが起こっています。タッチを聞いている人は、RelativeLayoutと同じネストレベルにいる必要があります。コード例を使って私の答えを更新しました。 –

+0

私は別の何かをやり終えました。私はOnTouchListenerをラップするRelativeLayoutに移動し、その子ImageViewを移動させました。私は理想的だとは思っていませんが、それは仕事をしました。 –

0

私は私がまたのgetX()メソッドを使用していたが、代わりにgetRawX(にそれを変更)し、それが正常に動作し、いくつかのしばらく前にこの同じ問題がありました。希望することができます。

関連する問題