我正在做的事情非常简单,我以前做过但现在它没有像我预期的那样运行。无论如何,让我简要解释一下我想做什么以及我得到什么::
情景::
我有一个RelativeLayout
,其中放置了ImageView
,现在我将touchlistener
设置为:imageview.setOnTouchListener(this);
它要求我覆盖我所做的onTouch(View v,MotionEvent event)
功能......
在Action_Move
我得到 x 和 y 并将它们添加到左边距和上边距,这样我就可以移动我的图像了。
奇怪的问题:
我的ImageView
正在移动,但是有一个非常明显的震动,就像我正朝着正确的方向移动一样,ImageView
会向右侧移动,但在它的路上它会回到左侧,使它看起来像图像是不稳定的,它的振动...类似的东西..我给log
期间得到的 x 和 y ...希望这会给你这个想法。
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;
答案 0 :(得分:5)
onTouch
中的X和Y变量是相对于附加onTouchListener
的View的X和Y.所以10,10将来自ImageView
的左上角而不是RelativeLayout
。
如果你使用这些值来移动你的ImageView
那么你自然会得到不稳定的行为,每个移动动作也会触发一个稍微不同的OnTouchEvent导致另一个移动动作 - 这个递归会给你一个“振动”效果。 / p>
答案 1 :(得分:0)
当我通过方法event.getRawY()
而不是event.getY()
获得Y坐标以移动视图时,摇摇欲坠的行为消失了。
因此,如果您使用了getY()
方法,请尝试更改它。