Android位图拉伸了吗?

时间:2016-02-15 21:17:21

标签: android bitmap rotation

我有一个应用程序,您可以在其中拍照,然后将其显示为相对布局的背景。但不知何故,图像以一种奇怪的方式被拉伸,可能被迫以横向模式(?)。我不知道如何以正确的方式旋转它,这是我的代码。

   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
        setContentView(R.layout.activity_main2);


        Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_PICTURES).getAbsolutePath();
        String filePath = Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_PICTURES) + "/picFolder/1.jpg";
        File image = new File(filePath);
        BitmapFactory.Options bmOptions = new BitmapFactory.Options();
        Bitmap bitmap = BitmapFactory.decodeFile(image.getAbsolutePath(),bmOptions);

        Drawable drawable = new BitmapDrawable(bitmap);
        RelativeLayout layout1 = (RelativeLayout) findViewById(R.id.layout);
        layout1.setBackgroundDrawable(drawable);
    }

This is how I take my picture

And this is how I get the result in my layout background, the image is streched, and not look like my taken image.

我的第一张照片是原始照片,第二张照片是我在布局中获得的拉伸。

如何解决这个问题?我做错了什么?提前谢谢!

2 个答案:

答案 0 :(得分:2)

RelativeLayout的宽高比与图像不同。将图像设置为视图的背景并不能为您提供任何实际的缩放选项,它只是拉伸图像以适合视图。相反,您应该在ImageView内放置一个RelativeLayout(首先声明它以使其落后于所有其他视图)并设置该视图的图像内容(的背景)。确保使用适当的scaleType;在这种情况下,我选择了centerCrop,它会缩放图像,使得宽度和高度都至少与ImageView的相应尺寸一样大。

<RelativeLayout ... >

    <ImageView
        android:id="@+id/background_image"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop" />

    <!-- other views -->

</RelativeLayout>

ImageView backgroundImageView = (ImageView) findViewById(R.id.background_image);
...
// after taking a picture
backgroundImageView.setImageBitmap(bitmap);

答案 1 :(得分:1)

我不确定你是否可以,但是如果你将图像移动到布局顶部的图像层,你可以设置比例类型以适合中心,它不会拉伸。     image.setScaleType(ScaleType.FIT_CENTER); 或

<ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:scaleType="center"/>