Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android中的拖放:如何获取拖放视图的新位置_Java_Android_Drag And Drop_Draggable - Fatal编程技术网

Java Android中的拖放:如何获取拖放视图的新位置

Java Android中的拖放:如何获取拖放视图的新位置,java,android,drag-and-drop,draggable,Java,Android,Drag And Drop,Draggable,嗨,我有一个简单的拖放活动。看起来是这样的: public class Test extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); findViewById(R.id.myimage1).setOnTouc

嗨,我有一个简单的拖放活动。看起来是这样的:

public class Test extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);

    findViewById(R.id.myimage1).setOnTouchListener(new MyTouchListener());
    findViewById(R.id.myimage2).setOnTouchListener(new MyTouchListener());
    findViewById(R.id.myimage3).setOnTouchListener(new MyTouchListener());
    findViewById(R.id.myimage4).setOnTouchListener(new MyTouchListener());
    findViewById(R.id.one).setOnDragListener(new MyDragListener());
    findViewById(R.id.two).setOnDragListener(new MyDragListener());
    findViewById(R.id.three).setOnDragListener(new MyDragListener());
    findViewById(R.id.four).setOnDragListener(new MyDragListener());
}


//TEST DRAG AND DROP

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;
        }
    }
}

class MyDragListener implements View.OnDragListener {
    Drawable enterShape = getResources().getDrawable(R.drawable.shape_droptarget);
    Drawable normalShape = getResources().getDrawable(R.drawable.shape);

    @Override
    public boolean onDrag(View v, DragEvent event) {
        int action = event.getAction();
        switch (event.getAction()) {
            case DragEvent.ACTION_DRAG_STARTED:
                // do nothing
                break;
            case DragEvent.ACTION_DRAG_ENTERED:
                v.setBackgroundDrawable(enterShape);
                break;
            case DragEvent.ACTION_DRAG_EXITED:
                v.setBackgroundDrawable(normalShape);
                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;
    }
}
}

现在我想知道视图onClick的新位置。我需要一个int。它可能是这样的:如果图片1在布局1中,int是:“11”,如果图片2在布局3中,int是“23”。我需要所有4张图片的位置,所以我需要4 int


但是我不知道如何得到这个新职位。我感谢你的帮助

当触发
onClick
时,只需调用以下命令即可获取子视图位置:

然后,通过为每个小部件的图像添加特定的标记。您可以将int构造为
imageTag+position
,例如:

@Override
public void onClick(View v) {
    String imageTag = v.getTag();
    int position = parentContainer.indexOfChild(v);

    int resultValue = Integer.parseInt(imageTag) + position;
}

我已经得到了答案。我只需要检查当前的拖动视图和布局。然后我只需要一些if函数,就这样,谢谢:)然后,@PatrickCzerwinski发布你自己的答案。也许我的不适合你的需要。你可以发布你自己的并接受它,没有什么不好的;)
@Override
public void onClick(View v) {
    String imageTag = v.getTag();
    int position = parentContainer.indexOfChild(v);

    int resultValue = Integer.parseInt(imageTag) + position;
}