【问题标题】:Remove ImageView auto-resizing删除 ImageView 自动调整大小
【发布时间】:2012-08-07 19:38:55
【问题描述】:

我想在我的屏幕设备上放置一个 Y 边距较大的 ImageView,这意味着图像的一部分会超出屏幕,然后图像会被裁剪。

问题是 Android 一直在缩放图像,以便它适合屏幕,但我不希望这样,我希望图像被裁剪。

如何强制 ImageView 被裁剪而不调整大小?

附:我尝试了所有可能的 ScaleType 属性,但没有一个对我有用!

代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >

<ImageView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="200dp"
    android:background="@drawable/my_image"
    android:scaleType="centerCrop"
    />      

</RelativeLayout>

【问题讨论】:

  • 等等。 CENTER_CROP 应该保持图像正常大小而不进行任何缩放。请发布代码。
  • 我刚刚在我的问题中添加了一些代码。 CENTER_CROP 对我不起作用。

标签: android scaling android-imageview crop


【解决方案1】:

尝试将android:background 替换为android:src

【讨论】:

  • 谢谢。图像的底部被正确裁剪,但图像的顶部也被裁剪,这很奇怪。
  • 这是 centerCrop 的预期行为。对于您要执行的操作,此post 可能会对您有所帮助:“我认为将其放在具有精确宽度/高度值的框架布局中(在裁剪发生之前指定最大图像尺寸)应该可以。然后在图像上查看,指定 layout_gravity=right 和 width/height 作为 wrap_content。"
【解决方案2】:

您的代码的第一个问题是您使用了:

android:background="@drawable/my_image"

代替:

android:src="@drawable/my_image"

(在背景下所有 scaleType 选项都不起作用)。

如果这仍然没有帮助,您可能必须使用 scaleType="matrix" 然后简单地创建一个矩阵来完成所需的工作。例如,假设您想要:

  • 保持图片的比例
  • 缩放图像,使宽度参数等于 X(例如:X 可以是屏幕的宽度)
  • 使图像的顶部可见(因此裁剪图像的底部) - 我假设这就是 centerCrop 可能不适合您的原因

代码如下:

ImageView imgView = (ImageView)findViewById(R.id.my_image_view);    
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), 
    R.drawable.my_image);

Matrix matrix = new Matrix();
// Let's assume X = 400
float scale = ((float) 400) / bitmap.getWidth();
matrix.setScale(scale, scale);

imgView.setImageMatrix(matrix);

并记得在 xml 文件中进行必要的更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 2013-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多