Android 如何拖动图像视图(不是阴影)?

Android 如何拖动图像视图(不是阴影)?,android,image,imageview,touch,drag,Android,Image,Imageview,Touch,Drag,我知道如何使用DrageEvent在屏幕上拖动imageView的阴影。但是我想做的是移动imageView,改变它的坐标。当我拖动一个图像时,它位于左侧,顶部不变。我创建了一个timertask,用于定期打印值,即使在拖动图像时,坐标也不会改变。这是因为我正在移动阴影,但我想使用拖动事件来移动imageView本身 方法: private final class MyTouchListener implements View.OnTouchListener { public boolean o

我知道如何使用DrageEvent在屏幕上拖动imageView的阴影。但是我想做的是移动imageView,改变它的坐标。当我拖动一个图像时,它位于左侧,顶部不变。我创建了一个timertask,用于定期打印值,即使在拖动图像时,坐标也不会改变。这是因为我正在移动阴影,但我想使用拖动事件来移动imageView本身

方法:

private final class MyTouchListener implements View.OnTouchListener {
public boolean onTouch(View view, MotionEvent motionEvent) {
    if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
        ClipData data = ClipData.newPlainText("", "");
        View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
        view.startDrag(data, shadowBuilder, view, 0);
        view.setVisibility(View.INVISIBLE);
        return true;
    } else {
        return false;
    }
}
}


}

在这里查看我的答案:我有一个想法:我可以创建一个手势检测器来检查imageView附近的任何点是否被按下,并命令图像移动到按下的点。如果按下远处的一个点,什么也不会发生。然后,我需要一个位图,一个onTouchListener,可能还有其他东西。这就像是一个拖动事件。我只是想把我用java创建的一个项目,它在我的计算机上运行得非常好,适应安卓系统,几周前我开始寻找一种方法来实现它。我真的不知道这个解决方案可能是错误的,然后告诉他们它是否真的可以工作。你需要那个ImageView做什么?我的项目是一个游戏。此ImageView是可控制的对象。播放器将其拖动到屏幕上,并尝试避免与其他对象发生冲突。根据可控制的ImageView的x和y,不同的ImageView有自己的移动。拖动位图而不是ImageView,为什么要使其变慢?
class MyDragListener implements View.OnDragListener {
Drawable enterShape = getResources().getDrawable(R.drawable.box);
Drawable normalShape = getResources().getDrawable(R.drawable.box);

@Override
public boolean onDrag(View v, DragEvent event) {
    int action = event.getAction();
    switch (event.getAction()) {
        case DragEvent.ACTION_DRAG_STARTED:
            System.out.println("Action is DragEvent.ACTION_DRAG_STARTED");
            Log.v(LOGS, "box " + box.getX());
            // do nothing
            break;
        case DragEvent.ACTION_DRAG_ENTERED:
            System.out.println("Action is DragEvent.ACTION_DRAG_ENTERED");
            Log.v(LOGS, "box " + box.getX());
            //v.setBackgroundDrawable(enterShape);
            v.setBackgroundResource(R.drawable.box);
            break;
        case DragEvent.ACTION_DRAG_EXITED:
            System.out.println("Action is DragEvent.ACTION_DRAG_FINISHED");
            Log.v(LOGS, "box " + box.getX());
            //v.setBackgroundDrawable(normalShape);
            v.setBackgroundResource(R.drawable.box);
            break;
        case DragEvent.ACTION_DROP:
            // Dropped, reassign View to ViewGroup
            View view = (View) event.getLocalState();
            ViewGroup owner = (ViewGroup) view.getParent();
            owner.removeView(view);
            LinearLayout container = (LinearLayout) v;
            container.addView(view);
            view.setVisibility(View.VISIBLE);
            break;
        case DragEvent.ACTION_DRAG_ENDED:
            //v.setBackgroundDrawable(normalShape);
        default:
            break;
    }
    return true;
}