使用当前壁纸作为动态壁纸背景

时间:2012-08-31 19:09:52

标签: java android bitmap android-canvas live-wallpaper

我使用以下代码获取当前壁纸:

  final WallpaperManager wallpaperManager = WallpaperManager.getInstance(this);
  final Drawable wallpaperDrawable = wallpaperManager.getDrawable();

如何从中创建位图?

就像我从res文件夹创建一个位图一样,我使用这个

    Resources res = getApplicationContext().getResources();
    b = BitmapFactory.decodeResource(res, R.drawable.wall);

我应该用什么代码将当前壁纸放到位图中,这样我就可以在画布上绘制它并将其用作我的动态壁纸背景?

1 个答案:

答案 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;
}