Java 仅上下拖动线性布局

Java 仅上下拖动线性布局,java,android,android-layout,drag-and-drop,android-linearlayout,Java,Android,Android Layout,Drag And Drop,Android Linearlayout,我需要能够拖动一个线性布局包含一个文本视图上下 线性布局是一个亲戚的孩子 这是我的布局文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" xml

我需要能够拖动一个线性布局包含一个文本视图上下

线性布局是一个亲戚的孩子

这是我的布局文件:

  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".MainActivity">





        <LinearLayout
            android:id="@+id/drag"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#55000000"
            >


        <TextView
        android:id="@+id/display"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
            android:gravity="center"
        android:textSize="30sp"
        android:textColor="#fff"
        android:textStyle="bold"
            android:layout_gravity="center"
        android:text="The Quick Brown Fox Jumped!!"
        android:padding="15dp"
        />
        </LinearLayout>





</RelativeLayout>

我不知道如何做到这一点。我从网上的一个教程中复制了拖放代码…..

我以前没有弄乱过这个,你也没有说问题,但我现在假设你可以在各个方向拖动它,而你只希望它可以在垂直轴上拖动

也就是说,我正在浏览你的代码,看到很多地方x轴发生了变化。无论左边距在哪里更改,代码都会在水平轴上移动

试试这个,看看这是否符合您的要求:

    @Override
    public boolean onTouch(final View v,final MotionEvent event)
    {
        final FrameLayout.LayoutParams par=(FrameLayout.LayoutParams)v.getLayoutParams();
        switch(event.getAction())
        {
            case MotionEvent.ACTION_MOVE:
            {
                par.topMargin+=(int)event.getRawY()-prevY;
                prevY=(int)event.getRawY();
                v.setLayoutParams(par);
                return true;
            }
            case MotionEvent.ACTION_UP:
            {
                par.topMargin+=(int)event.getRawY()-prevY;
                v.setLayoutParams(par);
                return true;
            }
            case MotionEvent.ACTION_DOWN:
            {
                prevY=(int)event.getRawY();
                par.bottomMargin=-2*v.getHeight();
                v.setLayoutParams(par);
                return true;
            }
        }
        return false;
    }
让我知道这对你是否有效, 约瑟夫·梅多斯

    @Override
    public boolean onTouch(final View v,final MotionEvent event)
    {
        final FrameLayout.LayoutParams par=(FrameLayout.LayoutParams)v.getLayoutParams();
        switch(event.getAction())
        {
            case MotionEvent.ACTION_MOVE:
            {
                par.topMargin+=(int)event.getRawY()-prevY;
                prevY=(int)event.getRawY();
                v.setLayoutParams(par);
                return true;
            }
            case MotionEvent.ACTION_UP:
            {
                par.topMargin+=(int)event.getRawY()-prevY;
                v.setLayoutParams(par);
                return true;
            }
            case MotionEvent.ACTION_DOWN:
            {
                prevY=(int)event.getRawY();
                par.bottomMargin=-2*v.getHeight();
                v.setLayoutParams(par);
                return true;
            }
        }
        return false;
    }