2012-08-31 59 views
2

我用下面的代码获取当前壁纸:使用当前壁纸的动态壁纸背景

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

如何创建从该位图?

当我创建res文件夹的位图就像我用这个

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

什么代码,我应该用它来获得当前壁纸为位图,这样我可以借鉴它在我的画布上,并用它作为我的生活壁纸背景?

回答

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; 
} 
+0

感谢这个工作对我来说:) – Badal