我正在做的事情非常简单,我以前做过但现在它没有像我预期的那样运行.无论如何,让我简要解释一下我想要做什么和我得到什么::
方案::
我有一个放置ImageView的RelativeLayout,现在我设置了touchlistener,如下所示:imageview.setOnTouchListener(this);
它让我覆盖了我做过的onTouch(View v,MotionEvent事件)功能……
并且在Action_Move中我得到x和y并将它们添加到左边距和上边距,这样我就可以移动我的图像了.
奇怪的问题:
我的ImageView正在移动,但是有一个非常明显的抖动,就像我正朝着正确的方向移动一样,ImageView将向右侧移动,但在它的路上它会回到左侧,这样它看起来像图像不稳定,它的振动……类似的东西..我给的是我在日志中得到的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,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)=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>
所以,这是最大的,我可以解释我的问题,如果你需要什么,请告诉我.
更新::
在其Container中移动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;
解决方法
onTouch中的X和Y变量是相对于附加了onTouchListener的View的X和Y.所以10,10将来自你的ImageView的左上角而不是RelativeLayout.
如果你使用这些值移动你的ImageView然后你自然会得到不稳定的行为,每个移动动作也会触发一个稍微不同的OnTouchEvent导致另一个移动动作 – 这个递归给你一个“振动”效果.