gpt4 book ai didi

java - 仅向上和向下拖动 LinearLayout

转载 作者:行者123 更新时间:2023-12-02 04:30:35 34 4
gpt4 key购买 nike

我需要能够仅上下拖动包含 TextView 的 LinearLayout。

LinearLayout 是RelativeLayout 的子级。

这是我的布局文件:

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

这是我尝试过的代码。

 LinearLayout dragqueen;
dragqueen = (LinearLayout) findViewById(R.id.drag);

findViewById(R.id.drag).setOnTouchListener(new View.OnTouchListener()
{
int prevX,prevY;

@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();
par.leftMargin+=(int)event.getRawX()-prevX;
prevX=(int)event.getRawX();
v.setLayoutParams(par);
return true;
}
case MotionEvent.ACTION_UP:
{
par.topMargin+=(int)event.getRawY()-prevY;
par.leftMargin+=(int)event.getRawX()-prevX;
v.setLayoutParams(par);
return true;
}
case MotionEvent.ACTION_DOWN:
{
prevX=(int)event.getRawX();
prevY=(int)event.getRawY();
par.bottomMargin=-2*v.getHeight();
par.rightMargin=-2*v.getWidth();
v.setLayoutParams(par);
return true;
}
}
return false;
}
});

我不知道如何实现这一目标。我从网上的教程中复制了拖放代码......

最佳答案

我以前没有搞过这个,而且你也没有真正提出问题,但我会冒险假设现在你可以将它向各个方向拖动,而你只希望它可在垂直轴上拖动。

话虽如此,我正在查看您的代码并看到 x 轴正在更改的许多地方。 leftMargin 发生变化的地方就是代码在水平轴上移动的地方。

尝试一下,看看这是否符合您的要求:

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

请告诉我这是否适合您,约瑟夫·梅多斯

关于java - 仅向上和向下拖动 LinearLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31526253/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com