Android获取当前Activity的屏幕截图并设置为壁纸

因为做项目的时候有人跟我提了一个想法,把备忘录生成一个图片,方便用户设置为壁纸,省去截屏裁剪的步骤。之前也没做过这个功能,在网络上搜索了一下,发现了一篇文章刚好满足需求地址,基本照搬上面的代码,在这基础上加上设置壁纸的功能,这样功能就基本实现了。
废话不多说,看代码

获取Activity的屏幕截图

这一步是整个环节的基础,没截图一切都是扯淡。截图部分利用的原理是通过Activity里的顶层View,再将该View的视图转化为Bitmap

public Bitmap myShot(Activity activity) { 
    // 获取windows中最顶层的view 
    View view = activity.getWindow().getDecorView();
    view.builDrawingCache();

    // 获取状态栏高度 
    Rect rect = new Rect();
    view.getWindowVisibleDisplayFrame(rect); 
    int statusBarHeights = rect.top;        
    Display display =  activity.getWindowManager().getDefaultDisplay(); 

    // 获取屏幕宽和高 
    int widths = display.getWidth(); 
    int heights = display.getHeight();

     // 允许当前窗口保存缓存信息 
    view.setDrawingCacheEnabled(true); 

    // 去掉状态栏 
    Bitmap bmp = Bitmap.createBitmap(view.getDrawingCache(), 0, statusBarHeights, widths, heights - statusBarHeights); 

    // 销毁缓存信息 
    view.destroyDrawingCache(); 

    return bmp; 
}

注释写的很详细了,获取DecorView,这个在自定义View的时候也了解过,是Activity的顶层View,包括title和content。然后利用View缓存的bitmap生成我们想要的bitmap,区域可以任意选择,需要截哪部分自行修改参数即可。

设置壁纸

获取到bitmap了,接下来看如何设置壁纸。设置壁纸需要用到的类是WallPaperManager,跟大多数的服务一样,需要context来获取,提醒:要在Manifest文件里给

public void setWallPaper(Bitmap bitmap, Activity activity) {
    WallPaperManager manager = WallPaperManager.getInstance(activity);
    manager.setBitmap(bitmap);
}

只有几行代码就搞定了,是不是觉得特别简单。
但是运行程序后你就会发现,效果不对,这是因为因为截取的部分较小,在设置时系统会以居中显示的方式设置壁纸。所以后来我的想法是自己进行bitmap的放大后再裁剪,确保最终的bitmap大小与屏幕大小一致。

你可能感兴趣的:(Android获取当前Activity的屏幕截图并设置为壁纸)