前言
安卓设备一般都自带截图功能,但是用户体验有不好之处。就是会连带着状态栏📶、🔋、时间日期、其他不必要页面中信息,等等与用户想截屏的内容不符的信息也会被保存下来。通常,截图后用户会再次裁剪一次才能想把真正需求分享出去。
因此,咱们技术研发会遇到针对性的会做一些应用内的截屏功能。
一、getDrawingCache
getDrawingCache()是其中一种截图手段,使用方便,主要针对应用内截图。
1、创建View
fun getShareView() : View {
val shareView: View =
LayoutInflater.from(context).inflate(R.layout.share_layout, null)
//内容...
return shareView
}
注意:一般大家实现思路都是点击事件里进行创建View绘制,很可能会遇到网络图片还未加载完的情况。因此,建议做延迟处理,或在点击前前置创建好。
2、测试和绘制
public static void layoutView(View v, int width, int height) {
v.layout(0, 0, width, height);
int measuredWidth = View.MeasureSpec.makeMeasureSpec(width, View.MeasureSpec.EXACTLY);
int measuredHeight = View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.EXACTLY);
v.measure(measuredWidth, measuredHeight);
v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
}
如果不走这个方法,bitmap转换时会没有视图(黑屏情况)。
调用方法:
// 设置视图的dp宽高
layoutView(share_view, dp2px(210), dp2px(180));
public static int dp2px(float dp) {
float scale = Resources.getSystem().getDisplayMetrics().density;
return (int) (dp * scale + 0.5f);
}
3、转换Bitmap
public static Bitmap getCacheBitmapFromView(View view) {
final boolean drawingCacheEnabled = true;
view.setDrawingCacheEnabled(drawingCacheEnabled);
//设置背景色 //view.setBackgroundColor(CommonUtils.getContext().getResources().getColor(R.c