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文件里给<uses-permission android:name="android.permission.SET_WALLPAPER" />

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容