【问题标题】:Scale an image up to fill entire ImageView in Android放大图像以填充 Android 中的整个 ImageView
【发布时间】:2011-07-12 19:15:22
【问题描述】:

我想放大图像以占据 ImageView 的整个大小。这与使用scaleType=fit_center 略有不同,因为如果图像纵横比与 ImageView 的纵横比不完全匹配,fit_center 将在图像周围留下条带。相反,我希望图像居中并按比例放大以完全填充封闭视图,并切掉任何多余的部分。

我可以通过在 onCreate() 期间计算我自己的自定义图像矩阵来实现这一点:

final Display display = getWindowManager().getDefaultDisplay();
final float screenWidth = display.getWidth();
final float screenHeight = display.getHeight();
final float imageWidth = splashView.getDrawable().getIntrinsicWidth();
final float imageHeight = splashView.getDrawable().getIntrinsicHeight();
final Matrix splashMatrix = new Matrix();
final float scale = Math.max(screenHeight/imageHeight,screenWidth/imageWidth);
splashMatrix.postScale( scale, scale );
splashView.setImageMatrix(splashMatrix);

这很好用,但似乎必须有一个更简单的方法。有谁知道如何在 ImageView 中放大图像,同时保留图像的纵横比并完全填充 ImageView?

(注意:在我的情况下,我的 ImageView 占据了全屏,所以我使用 getWindowManager().getDisplay() 来查找所需的图像大小。你不能使用 splashView.getWidth()/getHeight() 因为视图还没有尚未布局,没有尺寸)

【问题讨论】:

    标签: android android-layout android-imageview


    【解决方案1】:

    您可以使用android:scaleType="centerCrop"。 保持纵横比并根据需要缩放图像。

    更多信息请点击以下链接

    http://developer.android.com/reference/android/widget/ImageView.html#attr_android:scaleType

    【讨论】:

    • 它没有保持纵横比!我有layout_height=wrap_content,layout_width=fill_parent,纵横比没了,图片有屏幕的宽度,但是高度不对(太短了,应该是高度的40%)。
    • 我刚刚在上面的评论中解决了这个问题:android:adjustViewBounds="true"。
    • 这会削减图像一点
    • 它的作物边界!
    • 这就是问题,“切掉多余的部分”
    【解决方案2】:

    在某些情况下,您只需要

    android:adjustViewBounds="true"
    

    【讨论】:

      【解决方案3】:

      【讨论】:

        【解决方案4】:
        imageView.setScaleType(ImageView.ScaleType.FIT_XY);
        

        这对我来说可以使图像适合整个图像视图,而且它说“ScaleType.FIT_XY”以适合 imageView 的 X 和 Y 轴是有道理的。

        从 xml 文件中可以:

        android:scaleType="fitXY"
        

        【讨论】:

          【解决方案5】:

          我很晚了,但希望它对未来有所帮助。这是我如何在没有scaleType="fitXY" 的情况下将图像拉伸到全屏或图像视图的解决方案,因为它会损坏图像。使用以下库。

          [一个简单的图像视图,它以给定的比例缩放宽度或高度方面] https://github.com/santalu/aspect-ratio-imageview

          要查找设备屏幕的纵横比,请使用以下代码。

          DisplayMetrics metrics =this.getResources().getDisplayMetrics();
          float ratio = ((float)metrics.heightPixels / (float)metrics.widthPixels);
          

          【讨论】:

            【解决方案6】:

            你必须设置android:scaleType="centerCrop" 来填满整个屏幕 但是您注意到scaletype 属性与android:layout_widthandroid:layout_height 属性一起使用。 你必须设置为match_parent

            【讨论】:

              猜你喜欢
              • 2015-07-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-08-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多