onTouch дает странные точки касания Android
Его довольно простая вещь, которую я делаю, я делал это раньше, но теперь он не работает, как я ожидал. В любом случае позвольте мне кратко объяснить, что я пытаюсь сделать и что я получаю::
Сценарий::
У меня есть RelativeLayout
, в котором помещается ImageView
, Теперь я устанавливаю touchlistener
так: imageview.setOnTouchListener(this);
onTouch(View v,MotionEvent event)
, что я и сделал...
и в Action_Move
я получаю x и y и добавляю их к левому и верхнему полям, таким образом, я двигаюсь мой образ.
Странная Проблема:
Мой ImageView
движется, но с очень заметной дрожью, как если бы я двигался в правильном направлении, ImageView
пойдет в правую сторону, но на своем пути он возвращается в левую сторону, так что это выглядит как изображение не стабильно, его вибрация.. что-то вроде того.. Я даю x и y, которые я получаю во время log
... надеюсь, это даст вам идею.
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:
<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;
2 ответа:
Переменные X и Y в
onTouch
являются переменными X и Y относительно представления, к которому присоединеноonTouchListener
. так что 10, 10 будет сверху слева от вашегоImageView
, а не отRelativeLayout
.Если вы используете эти значения для перемещения вашего
ImageView
, то вы, естественно, получите неустойчивое поведение, каждое действие перемещения также вызовет немного другой OnTouchEvent, вызывающий другое действие перемещения - эта рекурсия дает вам "вибрирующий" эффект.