如何使用Java更改图像的坐标

时间:2019-01-26 23:02:53

标签: java android

目标:
单击按钮时,我想将图片的X和Y坐标更改为 android:layout_x 35dp android:layout_y:541dp使用Java代码而不是XML代码。

问题:
我找不到正确的语法代码来进行操作。

你知道怎么做吗?

谢谢!

信息:
*我是android的新手


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.jfdimarzio.myapplication">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_x="158dp"
        android:layout_y="77dp"
        android:src="@drawable/cat" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="testtest"
        android:text="Button" />



</AbsoluteLayout>

package com.jfdimarzio.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AbsoluteLayout;
import android.widget.ImageView;
import android.widget.RelativeLayout;

public class MainActivity extends AppCompatActivity
{

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

        ImageView myImageView = (ImageView) findViewById(R.id.imageView2);
        myImageView .setImageResource(R.drawable.cat);
    }

    public void testtest(View view)
    {
        AbsoluteLayout relativeLayout = new AbsoluteLayout(this);
        ImageView myImageView = (ImageView) findViewById(R.id.imageView2);

        myImageView.layout(10,10,10,10);
        //myImageView.layout(3,3,3,3);


    }
}

1 个答案:

答案 0 :(得分:1)

多年没有见过AbsoluteLayout

在Android中,View本身或包含该View的ViewGroup实际上并未指定View的位置。而是由视图随附的LayoutParams指定。

在xml文件中,创建视图时,宽度高度边距 x y 值都在LayoutParams对象中,该对象是自动创建并设置到视图上的。

LayoutParams是告诉容器如何定位视图的组件。

因此,如果您要更新ImageView x y ,则需要从其LayoutParams进行编辑。

ImageView myImageView = (ImageView) findViewById(R.id.imageView2);
AbsoluteLayout.LayoutParams params = (AbsoluteLayout.LayoutParams) myImageView.getLayoutParams();
params.x = NEW_X_VALUE; //Please enter this yourself
params.y = NEW_Y_VALUE; //Be careful of DP to PX conversions
myImageView.setLayoutParams(params);
myImageView.requestLayout();

因此,我在这里所做的是获取通过xml创建的LayoutParams并更改其中的x和y值。之后,我将修改后的LayoutParams设置回ImageView中。

我相信setLayoutParams()已经足以使父容器更新视图的位置,但以防万一它不……requestLayout()应该。