这面我就不说屏幕截图了, 直接进入任意布局获取截图。
因为我这面用到了友盟分享布局截图 所以我就分享给大家了 ,
😄😄。。。。。。
总体来说 主要还是得到布局的bitmap位图,接下来你可以存入本地、
也可以借助友盟分享 分享bitmap, 既然你拿到bitmap也就可以随心所欲了。
首先:
view.setDrawingCacheEnabled(true);//设置能否缓存图片信息
view.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
view.buildDrawingCache();
Bitmap bitmap = view.getDrawingCache();
拿到bitmap 重新绘制下
之前我没有重新绘制分享出去的bitmap,分享出去的bitmap背景应该是黑色的或者是透明
然后我就用Canvas 重新绘制
Bitmap newBitmap = Bitmap.createBitmap(bitmap);
Canvas c =new Canvas(newBitmap);
c.drawColor(Color.WHITE);
/** 如果不设置canvas画布为白色,则生成透明 */
view.draw(c);
view.setDrawingCacheEnabled(false);//设置能否缓存图片信息
view.destroyDrawingCache();//释放缓存占用的资源
我用了上个方法有时候获取的bitmap 为空。
其次:
然后我就简单粗暴
view.setDrawingCacheEnabled(true);//设置能否缓存图片信息(drawing cache)
view.buildDrawingCache();//如果能够缓存图片,则创建图片缓存
Bitmap bitmap = view.getDrawingCache();//如果图片已经缓存,返回一个bitmap*/
其实这样也可以拿到bitmap位图,但是在我截图之前赋值TextView,有的TextView不显示文字 ;
所以我又想到了第三种方法 对measur()这个方法搞一搞
view.measure(View.MeasureSpec.makeMeasureSpec(CommonTool.getScreenWidth(IApplication.getInstance()), View.MeasureSpec.EXACTLY),
View.MeasureSpec.makeMeasureSpec(CommonTool.getScreenHeight(IApplication.getInstance()), View.MeasureSpec.EXACTLY));
view.layout(0,0,view.getMeasuredWidth(),
view.getMeasuredHeight());
这样就好了 ,measure()里面是有两个参数的
分别是我们自己.makeMeasureSpec()这个方法自己制造的
CommonTool.getScreenHeight(IApplication.getInstance())
这个是我自己封装的拿取屏幕尺寸。
最后:
view.setDrawingCacheEnabled(true);//设置能否缓存图片信息
view.measure(View.MeasureSpec.makeMeasureSpec(CommonTool.getScreenWidth(IApplication.getInstance()), View.MeasureSpec.EXACTLY),
View.MeasureSpec.makeMeasureSpec(CommonTool.getScreenHeight(IApplication.getInstance()), View.MeasureSpec.EXACTLY));
view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
view.buildDrawingCache();
Bitmap bitmap = view.getDrawingCache();
拿到bitmap 重新绘制下
之前我没有重新绘制分享出去的bitmap,分享出去的bitmap背景应该是黑色的或者是透明。
然后我用Canvas 重新绘制,
Bitmap newBitmap = Bitmap.createBitmap(bitmap);
Canvas c =new Canvas(newBitmap);
c.drawColor(Color.WHITE);
/** 如果不设置canvas画布为白色,则生成透明 */
view.draw(c);
view.setDrawingCacheEnabled(false);//设置能否缓存图片信息
view.destroyDrawingCache();//释放缓存占用的资源
newBitmap 这个时候 就是我们最终的想要的结果了,去处理这个newBitmap。
最后bitmap 也需要释放掉啊。