如何更改ImageView的高度?

时间:2020-10-05 07:50:11

标签: android

运行时,屏幕上会出现三个ImageView。

当我按下每个按钮时,每个ImageView的可见性都消失了。

imageView1、2、3是连接到按钮的图像。

imageView4是围绕imageView1、2、3的矩形边框。

当imageView1、2和3的可见性消失时,我试图将imageView4的高度降低100dp。

所以我尝试了这个。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    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="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="120dp"
        android:layout_marginRight="120dp"
        android:src="@drawable/ic_launcher_foreground"
        android:visibility="visible"
        app:tint="@android:color/holo_red_light" />

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="120dp"
        android:layout_marginRight="120dp"
        android:src="@drawable/ic_launcher_foreground"
        android:visibility="visible"
        app:tint="@android:color/holo_green_light"
        android:layout_below="@+id/imageView1"/>

    <ImageView
        android:id="@+id/imageView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="120dp"
        android:layout_marginRight="120dp"
        android:src="@drawable/ic_launcher_foreground"
        android:visibility="visible"
        app:tint="@android:color/holo_blue_light"
        android:layout_below="@id/imageView2"/>

    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="100dp"
        android:text="Button1"
        android:layout_below="@id/imageView4" />

    <Button
        android:id="@+id/button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button2"
        android:layout_below="@id/button1"/>

    <Button
        android:id="@+id/button3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button3"
        android:layout_below="@id/button2" />

    <ImageView
        android:id="@+id/imageView4"
        android:layout_width="300dp"
        android:layout_height="350dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_marginLeft="50dp"
        android:layout_marginRight="50dp"
        app:srcCompat="@drawable/rectangle"/>
</RelativeLayout>
public class MainActivity extends AppCompatActivity {
    
    Button button1, button2, button3;
    ImageView imageView1, imageView2, imageView3, imageView4;
    boolean b1 = true, b2 = true, b3 = true;
    int height = 350;
    LinearLayout.LayoutParams layoutParams;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        button1 = findViewById(R.id.button1);
        button2 = findViewById(R.id.button2);
        button3 = findViewById(R.id.button3);

        imageView1 = findViewById(R.id.imageView1);
        imageView2 = findViewById(R.id.imageView2);
        imageView3 = findViewById(R.id.imageView3);
        imageView4 = findViewById(R.id.imageView4);
        
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                b1 = !b1;
                if (b1) {
                    imageView1.setVisibility(View.VISIBLE);
                } else {
                    imageView1.setVisibility(View.GONE);
                }
            }
        });

        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                b2 = !b2;
                if (b2) {
                    imageView2.setVisibility(View.VISIBLE);
                } else {
                    imageView2.setVisibility(View.GONE);
                }
            }
        });

        button3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                b3 = !b3;
                if (b3) {
                    imageView3.setVisibility(View.VISIBLE);
                } else {
                    imageView3.setVisibility(View.GONE);
                }
            }
        });

        if(!b1) {
            layoutParams = new LinearLayout.LayoutParams(300, height - 100);
            imageView4.setLayoutParams(layoutParams);
        }

        if(!b2) {
            layoutParams = new LinearLayout.LayoutParams(300, height - 100);
            imageView4.setLayoutParams(layoutParams);
        }

        if(!b3) {
            layoutParams = new LinearLayout.LayoutParams(300, height - 100);
            imageView4.setLayoutParams(layoutParams);
        }
    }
}

但是imageView4没有反应。

我该怎么办?

请帮助我...

1 个答案:

答案 0 :(得分:1)

在使用RelativeLayout时使用RelativeLayout.LayoutParams

与每次创建新的参数相比,从imageView检索LayoutParams是一个更好的主意,因为您还希望保留诸如边距/关系之类的其他参数。

LayoutParams也接受以像素为单位的尺寸,而不是dps。

替换

layoutParams = new LinearLayout.LayoutParams(300, height - 100);
imageView.setLayoutParams(layoutParams);

使用

float deltaHeight = 100 * getResources().getDisplayMetrics().density; // height in pixels
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) imageView.getLayoutParams();
layoutParams.height -= (int) deltaHeight;
imageView.setLayoutParams(layoutParams);