2010-11-28 18 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

可以。重新格式化您的問題,使其更具可讀性。 – 2010-11-28 04:11:34

回答

0

終於想通了。問題是我使用的是event.getX(),所以我想我正在拖動我的手指正在計算基於ImageView的值以及基於底層曲面的值。

+3

你是如何解決這個問題的? – I82Much 2010-11-28 13:23:39

0

實際上,這是因爲您正在更改設置了onTouchListener的相同視圖的邊距。爲了避免這種情況,您應該使用單獨的視圖 - 一個視圖應該從onTouchListener獲取getX()或getY(),並使用該信息更改另一個視圖的邊距。

<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。它仍然真的很蠢。 – 2013-03-21 03:20:16

0

@ I82Much我有同樣的問題,一些前段時間我也使用的getX()方法,而是將其改爲getRawX(),它工作正常。希望它有幫助