3

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

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

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

PS 我尝试了所有可能的 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>
4

2 回答 2

4

尝试替换android:backgroundandroid:src.

于 2012-08-07T20:21:24.947 回答
3

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

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 文件中进行必要的更改。

于 2012-08-07T21:01:35.583 回答