7

它很簡單的事情,我正在做,我已經做到了,但現在它沒有按預期運行。反正讓我簡單解釋一下我所試圖做的,什麼我收到::onTouch給怪異的觸摸點Android

方案:: 我有一個RelativeLayout其中ImageView放置,現在我設定touchlistener這樣的:imageview.setOnTouchListener(this);

這讓我重寫onTouch(View v,MotionEvent event)功能,我沒有... 並在Action_Move我得到Xÿ並將其添加到左側和頂部空間,這樣我運動我的形象。

奇怪的問題:ImageView是移動,但具有非常明顯的抖動,就像如果我在正確的方向正在移動,ImageView會去右側,但在它的途中它回來到左側,使它看起來像圖像是不穩定的,它的振動..類似的東西..我給xy我在log期間得到...希望這給你的想法。爲RelativeLayout的

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] 

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> 

所以,這是最大的,我可以解釋我的問題,還是如果你需要什麼,讓我知道。

更新:: 代碼在其容器即RelativeLayout移動ImageView

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

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

      imageview.setLayoutParams(params); 
      break; 

回答

5

X和Y變量onTouch是X和Y相對於具有要附onTouchListener觀。所以10,10將從ImageView的左上角開始,而不是RelativeLayout

如果你使用這些值來移動你的ImageView,那麼你自然會得到搖搖欲墜的行爲,每一個移動動作也會觸發一個稍微不同的onTouchEvent引起的又一舉措的行動 - 這遞歸給你一個「振動」效應。

+0

」每次移動動作也會觸發一個稍微不同的OnTouchEvent,導致另一個移動動作 - 這種遞歸會給你一個「振動」效果。「請詳細解釋一下,鏈接/文檔在詳細寫出的地方會非常有幫助。 – Farhan 2012-07-25 09:47:35

0

當我通過方法event.getRawY()而不是event.getY()獲得Y座標來移動視圖時,抖動行爲消失。 因此,如果您使用了getY()方法,請嘗試更改它。 「