Добрый вечерКак получить точные координаты при перетаскивании в Android?
Я пытаюсь реализовать перетащить и падение с помощью onTouchListener на перетаскиваемом зрения и onDragListener в представлении перетаскивания зоны следующим образом:
Вот MyDragListener ..
class MyDragListener implements OnDragListener {
Drawable enterShape = getResources().getDrawable(R.drawable.ic_launcher);
Drawable normalShape = getResources().getDrawable(R.drawable.ic_launcher);
@Override
public boolean onDrag(View v, DragEvent event) {
int action = event.getAction();
switch (event.getAction()) {
/*Some irrelevant cases*/
case DragEvent.ACTION_DROP:
// Dropped, reassign View to ViewGroup
View view = (View) event.getLocalState();
ViewGroup owner = (ViewGroup) view.getParent();
owner.removeView(view);
FrameLayout container;
container = (FrameLayout) v;
container.addView(view);
view.setX(event.getX());
view.setY(event.getY());
view.setVisibility(View.VISIBLE);
break;
default:
break;
}
return true;
}
}
И я задаю этот слушатель драг-зону, которая является frameLayout в моем примере так:
FrameLayout f= (FrameLayout) findViewById(id.FrameLayout);
f.setOnDragListener(new MyDragListener());
и вот раскладка:
<FrameLayout
android:id="@+id/FrameLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="0.8">
<ImageView
android:contentDescription="This is the main panel of the program"
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/blank"
android:isScrollContainer="true"
/>
<Button
android:id="@+id/DraggableButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Drag me -_-"
/>
Теперь проблема заключается в том, что я мог получить только необработанный X, Y координаты, и не дали точных результатов ....
Я попытался обработать это с помощью onTouchListener (и дать ip на DragListener), который дал мне координаты на контейнере, и точные результаты были получены при перетаскивании, но когда я отбросил представление, оно исчезло. Вот MyTouchListener код:
private final class MyTouchListener implements OnTouchListener {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
ClipData data = ClipData.newPlainText("", "");
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
view.startDrag(data, shadowBuilder, view, 0);
view.setVisibility(View.INVISIBLE);
return true;
}
else
if(motionEvent.getAction()==MotionEvent.ACTION_UP)
{
// View view = (View) motionEvent.getLocalState();
view.setX(motionEvent.getX());
view.setY(motionEvent.getY());
view.setVisibility(View.VISIBLE);
return true;
}
return false;
}
}
Может кто-нибудь сказать мне, что я предполагаю сделать?