【发布时间】:2015-02-17 23:36:08
【问题描述】:
我正在尝试使用带有 BitmapDrawable 的线性布局为活动做一个模糊的背景。 原始和模糊的位图就像 100x100。我想为手机分辨率(例如不是正方形的 1080p)统一缩放它。我在运行时得到背景图标。
LinearLayout layout = (LinearLayout) findViewById(R.id.mylinearlayout);
Bitmap bmp = imgLoader.getBitmap(iconUrl);
//Blur using this thread http://stackoverflow.com/questions/14780006/transparent-blurry-view-which-blurs-layout-underneath
Bitmap blurredBmp = CommonUtils.blurBitmap(bmp, Constants.RADIUS);
BitmapDrawable bmpdrawable = new BitmapDrawable(getResources(),blurredBmp);
bmpdrawable.setAlpha(Constants.ALPHA);
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN) {
layout.setBackgroundDrawable(bmpdrawable);
} else {
layout.setBackground(bmpdrawable);
}
现在,问题: 当我设置背景时,100x100 基本上被拉伸到非方形手机分辨率,看起来很奇怪。
我想要的:用拉伸的位图填充整个活动背景。剪掉一部分也没关系,但需要保持纵横比。
我尝试了什么:设置布局背景的许多线程建议使用 imageview 作为元素之一 + 使用重力和填充父。我不想这样做,因为我还有其他图像要显示在屏幕上。
我在创建模糊位图或发送不同宽度/高度时尝试了 Bitmap.createScaledBitmap,但它不起作用。任何帮助将不胜感激。
在不了解问题的情况下将其标记为另一个线程的欺骗也不是很酷。
谢谢
【问题讨论】:
-
扩展 BitmapDrawable 并在
draw(Canvas)方法中进行自定义绘图,最简单的方法是使用带有 Matrix 参数的 Canvas.drawBitmap -
并且不要使用任何 Bitmap.createScaledBitmap,而是缩放您的 Canvas(直接或间接)