比方说,我有一个水平长的图像,“草”。现在,我想将其用作视图的背景图像,但我想将其停靠在底部。在网上搜索后,我发现需要将图像包装为可绘制的图像,例如:
<?xml version="1.0" encoding="utf-8"?>
<bitmap
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/grass"
android:gravity="bottom|left" />
问题是图像被裁剪到右侧。因此,我尝试了bottom|left|right
,但是没有保持宽高比。我可以使图像水平放置,但可以通过自动垂直缩放来保持宽高比吗?还是可绘制对象无法做到这一点?
答案 0 :(得分:0)
您不能仅使用XML来实现。如果您不想以编程方式绘制位图,则可以将ImageView包裹在RelativeLayout中,然后设置ImageView的scaleType属性:
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:src="@drawable/grass"
android:scaleType="fitXY" />
</RelativeLayout>
答案 1 :(得分:0)
您要搜索的是centerInside ScaleType。请从ImageView中删除ScaleType并尝试执行以下操作:
public static synchronized Bitmap centerInside(Bitmap bitmap,int width,int height){
if(bitmap.getWidth() == bitmap.getHeight()){
Log.i("crop","already matched");
return Bitmap.createScaledBitmap(bitmap, width, height, true);
}
//int size = width > height ? width : height;
float scale = ImageUtils.calculateImageSampleSize(bitmap.getWidth(), bitmap.getHeight(),width,height);
width = (int) ((float)bitmap.getWidth() / scale);
height = (int) ((float)bitmap.getHeight() / scale);
bitmap = Bitmap.createScaledBitmap(bitmap, width, height, true);
if (bitmap.getWidth() >= bitmap.getHeight()){
bitmap = Bitmap.createBitmap(
bitmap,
bitmap.getWidth()/2 - bitmap.getHeight()/2,
0,
bitmap.getHeight(),
bitmap.getHeight()
);
}else{
bitmap = Bitmap.createBitmap(
bitmap,
0,
bitmap.getHeight()/2 - bitmap.getWidth()/2,
bitmap.getWidth(),
bitmap.getWidth()
);
}
return bitmap;
}
答案 2 :(得分:0)
如果我理解您的要求正确,则您的图像需要垂直拉伸并且水平限制。
我建议的一个好的解决方案是从您的可绘制对象中创建9个补丁图像,并定义图像可以拉伸的区域。 您可以使用this教程作为参考。