晚上好
我正在尝试在可拖动视图上使用 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(并在 DragListener 上提供 ip)来处理这个问题,它给了我容器上的坐标,并且在拖动时产生了精确的结果,但是当我放下视图时它消失了。这是 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;
}
}
谁能告诉我我想做什么?