工作中遇到一个需求是分享图片时将图片固定为1080p的分辨率,但实际上是按安卓的dp方式写的布局,那这样就会有个问题,view生成的bitmap也是按屏幕进行缩放的,那么这就不符合需求。
但好在项目中已有解决办法,之前查了挺久没找到答案,所以记录一下宝藏:
fun shareImageContext(origContext: Context): Context { return ContextThemeWrapper(origContext.createConfigurationContext(Configuration(origContext.resources.configuration).apply { densityDpi = 480 fontScale = 1f }), R.style.Theme_Dark) }
简单明了,然后返回的新context,就用于LayoutInflater.from(context)中即可,然后填充数据,最后使用以下的方式就可以生成bitmap了,再然后保存等。
fun generateViewBitmap(v: View): Bitmap {
val bitmap: Bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
val canvas = Canvas(bitmap)
v.draw(canvas)
return bitmap
}
以上。
本站由以下主机服务商提供服务支持:
0条评论