ANDROID将视图拖动到布局上的任意位置

ANDROID将视图拖动到布局上的任意位置,android,events,drag-and-drop,touch,Android,Events,Drag And Drop,Touch,我想将视图拖到屏幕上的任何位置 我已经实现了touch listener,唯一的问题是层次结构中位于其他视图之前的视图往往会将它们拖到一起。我希望每个视图都能够独立于其他视图拖动到任何位置 我确保删除了视图,然后在拖动结束时添加了不同的参数 public class MainActivity extends Activity { int clickCount; private float dx, dy; private boolean isDragging; private ViewGrou

我想将视图拖到屏幕上的任何位置

我已经实现了touch listener,唯一的问题是层次结构中位于其他视图之前的视图往往会将它们拖到一起。我希望每个视图都能够独立于其他视图拖动到任何位置

我确保删除了视图,然后在拖动结束时添加了不同的参数

public class MainActivity extends Activity {  
int clickCount;
private float dx, dy;
private boolean isDragging;
private ViewGroup RootLayout;
private int Position_X;
private int Position_Y;
private TextView txtV01, txtV02, txtV03;

long startTime = 0;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    RootLayout = (ViewGroup) findViewById(R.id.main_layout);

    txtV02 = (TextView) findViewById(R.id.txt02);
    txtV02.setOnTouchListener(myTouchListener());

    txtV01 = (TextView) findViewById(R.id.txt01);
    txtV01.setOnTouchListener(myTouchListener());

    txtV03 = (TextView) findViewById(R.id.txtV03);
    txtV03.setOnTouchListener(myTouchListener());
}


private View.OnTouchListener myTouchListener() {
    return new View.OnTouchListener() {

        @SuppressLint("ClickableViewAccessibility")
        @Override
        public boolean onTouch(View view, MotionEvent event) {
            final int x = (int) event.getRawX();
            final int y = (int) event.getRawY();

            switch (event.getAction() & MotionEvent.ACTION_MASK) {

                case MotionEvent.ACTION_DOWN:
                    LinearLayout.LayoutParams lParams = 
(LinearLayout.LayoutParams)
                            view.getLayoutParams();

                    dx = x - lParams.leftMargin;
                    dy = y - lParams.topMargin;

                    break;

                case MotionEvent.ACTION_UP:
                     break;

                case MotionEvent.ACTION_MOVE:

                    LinearLayout.LayoutParams layoutParams = 
(LinearLayout.LayoutParams) view
                            .getLayoutParams();
                    layoutParams.leftMargin = x - (int) dx;
                    layoutParams.topMargin = y - (int) dy;
                    layoutParams.rightMargin = 0;
                    layoutParams.bottomMargin = 0;

                    view.setLayoutParams(layoutParams);

                    break;
            }
            RootLayout.invalidate();
            return true;
        }
    };
  }
}
布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:tag="space">

<Space
    android:layout_width="match_parent"
    android:layout_height="387dp"
    android:tag="space_top" />

<TextView
    android:id="@+id/txt01"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:fontFamily="cursive"
    android:tag="line1"
    android:text="This is line one ONE ONE ONE"
    android:textAlignment="center"
    android:textSize="33dp">

</TextView>

<Space
    android:layout_width="match_parent"
    android:layout_height="35dp" />

<TextView
    android:id="@+id/txt02"

    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:tag="line2"
    android:text="This is line TWO TWO NOT Line 1"
    android:textAlignment="center"
    android:textSize="18dp">
</TextView>

<Space
    android:layout_width="match_parent"
    android:layout_height="35dp" />

<TextView
    android:id="@+id/txtV03"

    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:tag="line2"
    android:text="This is line THREE THREE Leave me"
    android:textAlignment="center"
    android:textSize="18dp">
   </TextView>
</LinearLayout>


非常感谢您的帮助。

您的代码当前的行为是什么?当我移动最后一个文本视图时,一切正常。但是如果我移动第一个,它会将下面的两个文本视图拖到一起。如果我拖动第二个文本视图,它将移动最后一个文本视图。