我有一个应用程序,您可以在其中拍照,然后将其显示为相对布局的背景。但不知何故,图像以一种奇怪的方式被拉伸,可能被迫以横向模式(?)。我不知道如何以正确的方式旋转它,这是我的代码。
@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);
}
我的第一张照片是原始照片,第二张照片是我在布局中获得的拉伸。
如何解决这个问题?我做错了什么?提前谢谢!
答案 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"/>