【问题标题】:Android Studio ImageView Change Only Width and Maintain Aspect RatioAndroid Studio ImageView 仅更改宽度并保持纵横比
【发布时间】:2021-11-02 01:39:19
【问题描述】:

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


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

但这似乎没有效果。

有没有办法只指定宽度值,并相应地调整高度以使图像保持其纵横比?

谢谢

【问题讨论】:

    标签: android android-studio kotlin imageview layoutparams


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      在 XML 文件中添加固定宽度并保持高度为 wrap_content 并查看。我认为您不需要以编程方式对其进行扩展。

      【讨论】:

      • 对不起,让我更新一下我的问题,我并没有真正使用“800”,它实际上是一个基于设备宽度的数字
      • 好的,刚刚更新了代码以反映我的意思
      猜你喜欢
      • 1970-01-01
      • 2013-08-07
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      • 2018-06-21
      • 2016-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多