我使用以下代码获取当前壁纸:
final WallpaperManager wallpaperManager = WallpaperManager.getInstance(this);
final Drawable wallpaperDrawable = wallpaperManager.getDrawable();
如何从中创建位图?
就像我从res文件夹创建一个位图一样,我使用这个
Resources res = getApplicationContext().getResources();
b = BitmapFactory.decodeResource(res, R.drawable.wall);
我应该用什么代码将当前壁纸放到位图中,这样我就可以在画布上绘制它并将其用作我的动态壁纸背景?
答案 0 :(得分:4)
提取的Drawable
应该是BitmapDrawable
。如有必要,您可以使用instanceof
验证这一点。
既然如此,你所要做的就是:
final Drawable wallpaperDrawable = wallpaperManager.getDrawable();
final Bitmap wallpaperBitmap = ((BitmapDrawable) wallpaperDrawable).getBitmap();
编辑:如果结果Drawable
不是BitmapDrawable
,您可以使用以下方法进行转换(在this answer中找到,归功于André):
public static Bitmap drawableToBitmap(Drawable drawable) {
if (drawable instanceof BitmapDrawable) {
return ((BitmapDrawable)drawable).getBitmap();
}
Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
return bitmap;
}