onTouch给Android带来了奇怪的接触点

onTouch给Android带来了奇怪的接触点,android,android-relativelayout,android-imageview,ontouchlistener,Android,Android Relativelayout,Android Imageview,Ontouchlistener,这是我正在做的非常简单的事情,我以前做过,但现在它不像我预期的那样运行。无论如何,让我简单地解释一下我正在尝试做什么以及我得到了什么: 场景:: 我有一个RelativeLayout,其中放置了一个ImageView,现在我将touchlistener设置如下:ImageView.setOnTouchListener(这个) 它要求我重写我所做的onTouch(View v,MotionEvent)函数。。。 在Action\u Move中,我得到x和y,并将它们添加到左上边距,这样我就移动了我

这是我正在做的非常简单的事情,我以前做过,但现在它不像我预期的那样运行。无论如何,让我简单地解释一下我正在尝试做什么以及我得到了什么:

场景:: 我有一个
RelativeLayout
,其中放置了一个
ImageView
,现在我将
touchlistener
设置如下:
ImageView.setOnTouchListener(这个)

它要求我重写我所做的
onTouch(View v,MotionEvent)
函数。。。 在
Action\u Move
中,我得到xy,并将它们添加到左上边距,这样我就移动了我的图像

奇怪的问题: 我的
ImageView
正在移动,但有一个非常明显的抖动,就像我在向右移动一样,
ImageView
将移到右侧,但在移动的过程中,它会回到左侧,这样看起来像是图像不稳定,它的振动。。像那样的。。我给出了我在
日志中得到的xy。。。希望这能给你一个想法

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>

onTouch
中的X和Y变量是相对于附加了
onTouch侦听器的视图的X和Y。因此,10,10将位于
图像视图的左上角,而不是
相对视图的左上角


如果使用这些值移动
ImageView
,那么您自然会出现不稳定的行为,每个移动操作也会触发一个稍有不同的OnTouchEvent,从而导致另一个移动操作-此递归会给您一个“振动”效果。

当我通过方法
event.getRawY()获得Y坐标时
而不是
event.getY()
要移动视图,不稳定的行为将消失。
因此,如果您使用了
getY()
方法,请尝试对其进行更改。

“每个移动操作也会触发一个稍有不同的OnTouchEvent,从而导致另一个移动操作-此递归会给您带来“振动”效果。”请稍作解释,详细编写的链接/文档将非常有用。。。
case MotionEvent.ACTION_MOVE:
            LayoutParams params = (LayoutParams) imageview.getLayoutParams();

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

            imageview.setLayoutParams(params);
            break;