使用Android按钮移动Textview

时间:2017-10-21 00:59:08

标签: java android xml button textview

我要做的是当您单击图像中显示的任何箭头按钮时,TextView user_text将在相应方向上移动少量。由于某些原因,当我单击按钮时使用下面的Java代码,文本一直移动到屏幕的绝对边缘。我不确定为什么会发生这种情况所以我决定尝试使用user_text.getX() and user_text.getY()来获取他们的X和Y坐标但是没有做任何事情。经过一番研究,我发现我应该一直在使用user_text.getLeft() and user_text.getTop() and/or user_text.getWidth()。在尝试了这些之后,工作室的android监视器/调试部分说那些数字是0.我不知道为什么会发生这种情况但如果有人能告诉我我应该做什么而不是如何得到它以便每次你点击它移动的按钮,非常感谢。

由于

P.S。我在图片上写道,这样你就可以知道被识别为user_text

的内容

reference image

我的相关XML代码:

<TextView
    android:id="@+id/user_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:textColor="@android:color/black"
    android:textSize="18sp"
    android:elevation="20dp"
    android:paddingBottom="120dp" />
  .    <--- that is supposed to represent that there's other non-relevant code in between
  .
  .

<RelativeLayout
    android:id="@+id/move_Group"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_marginBottom="5dp"
    android:layout_centerInParent="true"
    android:visibility="visible"
    android:gravity="center">

    <Button
        android:id="@+id/move_left"
        android:layout_width="50dp"
        android:layout_height="wrap_content"
        android:background="@mipmap/arrow"
        android:rotation="-90"
        android:layout_marginRight="20dp"
        android:onClick="moveLeft"/>

    <Button
        android:id="@+id/move_up"
        android:layout_width="50dp"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/move_left"
        android:background="@mipmap/arrow"
        android:layout_marginRight="20dp"
        android:onClick="moveUp"/>

    <Button
        android:id="@+id/move_down"
        android:layout_width="50dp"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/move_up"
        android:background="@mipmap/arrow"
        android:rotation="180"
        android:layout_marginRight="20dp"
        android:onClick="moveDown"/>

    <Button
        android:id="@+id/move_right"
        android:layout_width="50dp"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/move_down"
        android:background="@mipmap/arrow"
        android:rotation="90"
        android:layout_marginRight="20dp"
        android:onClick="moveRight"/>

    <TextView
        android:id="@+id/move"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="MOVE"
        android:textSize="20sp"
        android:layout_toRightOf="@id/move_right"
        android:textColor="@android:color/black"/>

</RelativeLayout>

我的相关Java代码:

TextView user_text = (TextView) findViewById(R.id.user_text);
.
.
.
public void moveLeft(View view)
{
    user_text.setX(userX + 10);
}

public void moveUp(View view)
{
    user_text.setY(userY + 10);
}

public void moveDown(View view)
{
    user_text.setY(userY - 10);
}

public void moveRight(View view)
{
    user_text.setX(userX - 10);
}

1 个答案:

答案 0 :(得分:3)

在点击功能中获取user_text的当前X和Y.

public void moveLeft(View view)
{
      user_text.setX(user_text.getX() - 10);
}

向上移动时:Y = Y - delta。

public void moveUp(View view)
{
       user_text.setY(user_text.getY() - 10);
}

向下移动时:Y = Y + delta

public void moveDown(View view)
{
    user_text.setY(user_text.getY() + 10);
}

这是MainActivity.java中的示例。我觉得它有效

public class MainActivity extends AppCompatActivity {

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

        user_text = (TextView) findViewById(R.id.user_text);

    }

    public void moveLeft(View view)
    {
        user_text.setX(user_text.getX() - 10);
    }

    public void moveUp(View view)
    {
        user_text.setY(user_text.getY() - 10);

    }

    public void moveDown(View view)
    {
        user_text.setY(user_text.getY() + 10);

    }

    public void moveRight(View view)
    {
        user_text.setX(user_text.getX() + 10);
    }
}