Java 使用拖放将ImageView添加到相对布局

Java 使用拖放将ImageView添加到相对布局,java,android,drag-and-drop,imageview,Java,Android,Drag And Drop,Imageview,我对安卓非常陌生,我正在制作一个应用程序,在屏幕底部有一个垂直的线性布局,屏幕上有一个图像视图列表。每个视图都可以拖动到屏幕的主要部分,但是,如果我拖动布局最右侧的一个ImageView,它会将视图拖到实际放置点的左侧。奇怪的是,如果我尝试拖动linearlayout(左侧的那个)中的第一个imageview,它将正好落在我放置它的位置下方 我的onDrag和onTouch听众 class MyDragListener implements OnDragListener { @Ove

我对安卓非常陌生,我正在制作一个应用程序,在屏幕底部有一个垂直的线性布局,屏幕上有一个图像视图列表。每个视图都可以拖动到屏幕的主要部分,但是,如果我拖动布局最右侧的一个ImageView,它会将视图拖到实际放置点的左侧。奇怪的是,如果我尝试拖动linearlayout(左侧的那个)中的第一个imageview,它将正好落在我放置它的位置下方

我的onDrag和onTouch听众

class MyDragListener implements OnDragListener {

     @Override
      public boolean onDrag(View v, DragEvent event) {

        float X = event.getX();
        float Y = event.getY();

        switch (event.getAction()) {
        case DragEvent.ACTION_DRAG_STARTED:

          break;

        case DragEvent.ACTION_DRAG_ENTERED:

          break;
        case DragEvent.ACTION_DRAG_EXITED:        

          break;
        case DragEvent.ACTION_DROP:


          View view = (View) event.getLocalState();
          ViewGroup owner = (ViewGroup) view.getParent();
          owner.removeView(view);
          container = (RelativeLayout) v;
          container.setLayoutParams(findViewById(R.id.drawingbackground).getLayoutParams());

          container.addView(view);

          view.setX(X-(view.getWidth()/2));
          view.setY(Y-(view.getHeight()/2));
          view.setVisibility(View.VISIBLE);




          break;
        case DragEvent.ACTION_DRAG_ENDED:

          default:
          break;
        }
        return true;
      }
}
而OnTouch

final class MyTouchListener implements OnTouchListener {
      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);

          return true;

        }  if(motionEvent.getAction()== MotionEvent.ACTION_UP){
            view.performClick();
        }



        return false;

      }


}

任何帮助都将不胜感激

更改xml。使用相对布局而不是线性布局,并固定它们的高度和宽度。这将非常有效