通过一个View创建Bitmap
来源:互联网 发布:数据库表设计 编辑:程序博客网 时间:2024/05/31 06:23
public class BitmapUtil { //节省每次创建时产生的开销,但要注意多线程操作synchronized private static final Canvas sCanvas = new Canvas(); /** * 从一个view创建Bitmap: * 注意点:绘制之前要清掉 View 的焦点,因为焦点可能会改变一个 View 的 UI 状态 * 来源:https://github.com/tyrantgit/ExplosionField */ public static Bitmap createBitmapFromView(View view, float scale) { if (view instanceof ImageView) { Drawable drawable = ((ImageView) view).getDrawable(); if (drawable != null && drawable instanceof BitmapDrawable) { return ((BitmapDrawable) drawable).getBitmap(); } } view.clearFocus(); Bitmap bitmap = createBitmapSafely((int) (view.getWidth() * scale), (int) (view.getHeight() * scale), Bitmap.Config.ARGB_8888, 1); if (bitmap != null) { synchronized (sCanvas) { Canvas canvas = sCanvas; canvas.setBitmap(bitmap); canvas.save(); // 防止 View 上面有些区域空白导致最终 Bitmap 上有些区域变黑 canvas.drawColor(Color.WHITE); canvas.scale(scale, scale); view.draw(canvas); canvas.restore(); canvas.setBitmap(null); } } return bitmap; } //安全的创建bitmap;如果新建 Bitmap 时产生了 OOM,可以主动进行一次 GC - System.gc(),然后再次尝试创建 private static Bitmap createBitmapSafely(int width, int height, Bitmap.Config config, int retryCount) { try { return Bitmap.createBitmap(width, height, config); } catch (OutOfMemoryError e) { e.printStackTrace(); if (retryCount > 0) { System.gc(); return createBitmapSafely(width, height, config, retryCount - 1); } return null; } }}
阅读全文
0 0
- 通过一个View创建Bitmap
- 群英传笔记 自定义view之 通过组合(复合)控件创建一个通用标题栏view
- 通过不同形式获取Bitmap,以及创建Bitmap
- 通过BYTE数组创建Gdiplus::Bitmap
- 通过创建一个位图的XY Chart来学习Android绘图类Rect,Paint,Bitmap,Canvas(附源码)
- 通过创建一个位图的XY Chart来学习Android绘图类Rect,Paint,Bitmap,Canvas(附源码)
- 创建一个纯色的Bitmap(任意颜色)
- ios 通过一个View生成一个图片
- UI 创建一个view对象
- 一个View的创建过程
- drawable与bitmap的转换,以及如何将一个view生成一个bitmap
- 通过一个网络url地址获取一个bitmap对象
- 代码库:把一个view转化成bitmap对象
- 将一个view对象转换为bitmap对象
- Android 获取一个view当前显示的bitmap
- Bitmap.createBitmap创建的新bitmap可能与原始bitmap是一个对象
- 通过 Navigation View 创建导航抽屉
- 通过 Navigation View 创建导航抽屉
- HDU
- 盒子模型
- Apache Flink vs Apache Spark
- js中定义函数的三种方式
- kali2.0更新源
- 通过一个View创建Bitmap
- 关于mvp
- 07_异常
- C++ 类、对象知识点
- BZOJ 1568 Blue Mary开公司(线段树,标记永久化)
- 简单的打地鼠游戏
- EBS创建采购订单
- Highcharts x轴为时间时,设置plotBands
- [js高手之路]设计模式系列课程-组合模式+寄生组合继承实战新闻列表