android自定义截图,Android获取当前Activity的屏幕截图并设置为壁纸

这篇博客介绍了如何在Android应用中实现将备忘录内容生成图片并设置为壁纸的功能。首先,通过获取Activity的顶层View并转化为Bitmap实现截图,接着使用WallpaperManager设置壁纸。然而,直接设置可能导致图片显示不全,因此需要对Bitmap进行放大裁剪以适应屏幕尺寸。代码简洁明了,适合Android开发者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

废话不多说,看代码

获取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大小与屏幕大小一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值