Android Studio ImageView 仅更改宽度并保持纵横比

Android Studio ImageView Change Only Width and Maintain Aspect Ratio

我有一个像这样的图像视图:


    <ImageView
        android:id="@+id/add_image_signup"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/other_text"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="20dp"
        app:srcCompat="@drawable/add_button" />

我正在尝试使用布局参数以编程方式(基于设备大小)进行缩放。这样的东西效果很好:

        val displayMetrics = DisplayMetrics()
        windowManager.defaultDisplay.getMetrics(displayMetrics)
        val height = displayMetrics.heightPixels
        val width = displayMetrics.widthPixels

        val addImage = findViewById<ImageView>(R.id.add_image_signup)
        val layoutParams = addImage.getLayoutParams()
        layoutParams.width = width * 0.3
        layoutParams.height = height * 0.1

        addImage.setLayoutParams(layoutParams)

并对图像进行缩放。但是,我只想缩放 宽度,并相应地缩放高度,以便图像保持其纵横比。

我试过只缩放宽度,像这样:

        val addImage = findViewById<ImageView>(R.id.add_image_signup)
        val layoutParams = addImage.getLayoutParams()
        layoutParams.width = width * 0.3
        addImage.setLayoutParams(layoutParams)

但这似乎没有效果。

有没有办法只指定宽度值,并相应地设置高度比例,以便图像保持其纵横比?

谢谢

在XML文件中添加固定宽度,保持高度为wrap_content,看看。我认为您不需要以编程方式扩展它。

将设置的宽度除以纵横比得到高度,然后像下面的代码一样设置

Display display = requireActivity().getWindowManager().getDefaultDisplay();
        DisplayMetrics outMetrics = new DisplayMetrics();
        display.getMetrics(outMetrics);

        Resources r = getResources();

        float density = getResources().getDisplayMetrics().density;
        //float dpHeight = outMetrics.heightPixels / density;
        float dpWidth = outMetrics.widthPixels / density;

        int widthPX = Math.round(TypedValue.applyDimension(
                TypedValue.COMPLEX_UNIT_DIP, yourImageFixedWidthValue, r.getDisplayMetrics()));

        float imageAspectRatio = (float) 335 / 217;
        float imageWidth = widthPX;
        float imageHeight = imageWidth / imageAspectRatio;

        imageView.getLayoutParams().height = Math.round(TypedValue.applyDimension(
                TypedValue.COMPLEX_UNIT_DIP, imageHeight, r.getDisplayMetrics()));
        imageView.setAdjustViewBounds(true);
        imageView.setScaleType(ImageView.ScaleType.FIT_XY);