博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Android学习笔记二] View转化Bitmap
阅读量:6528 次
发布时间:2019-06-24

本文共 2342 字,大约阅读时间需要 7 分钟。

   在View类中的onDraw方法的参数Canvas是View绘制的背景,要将View转换为Bitmap实际上就是让Canvas上的绘制操作绘制到Bitmap上。

   View转化为Bitmap也称为截屏,让用户看到的View视图转化为图片的过程。

   关于View转化Bitmap涉及到的View类中的方法有:

   protected void onDraw(Canvas canvas)   public void buildDrawingCache()   public void destroyDrawingCache()   public Bitmap getDrawingCache()   public void setDrawingCacheEnabled(boolean enabled)

   下面是常见的几个View截屏的示例:

  

1.View转Bitmap

   

public final Bitmap screenShot(View view) {        if (null == view) {            throw new IllegalArgumentException("parameter can't be null.");        }        view.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);        view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());        view.setDrawingCacheEnabled(true);        view.buildDrawingCache();        Bitmap bitmap = view.getDrawingCache();        return bitmap;    }

  

2. Activity转Bitmap,不带状态栏

public final Bitmap screenShot(Activity activity) {        if (null == activity) {            throw new IllegalArgumentException("parameter can't be null.");        }        View view = activity.getWindow().getDecorView();        view.setDrawingCacheEnabled(true);        view.buildDrawingCache();        Bitmap b1 = view.getDrawingCache();        Rect frame = new Rect();        view.getWindowVisibleDisplayFrame(frame);        int statusBarHeight = frame.top;        Point point = new Point();        activity.getWindowManager().getDefaultDisplay().getSize(point);        int width = point.x;        int height = point.y;        Bitmap b2 = Bitmap.createBitmap(b1, 0, statusBarHeight, width, height - statusBarHeight);        view.destroyDrawingCache();        return b2;    }

3. ScrollView转长Bitmap(类似锤子便签的截长图)

 public final Bitmap screenShot(ScrollView scrollView) {        if (null == scrollView) {            throw new IllegalArgumentException("parameter can't be null.");        }        int height = 0;        Bitmap bitmap;        for (int i = 0, s = scrollView.getChildCount(); i < s; i++) {            height += scrollView.getChildAt(i).getHeight();            scrollView.getChildAt(i).setBackgroundResource(android.R.drawable.screen_background_light);        }        bitmap = Bitmap.createBitmap(scrollView.getWidth(), height, Bitmap.Config.ARGB_8888);        final Canvas canvas = new Canvas(bitmap);        scrollView.draw(canvas);        return bitmap;    }

转载地址:http://ohvbo.baihongyu.com/

你可能感兴趣的文章
华尔街宫斗戏升温:银行巨头和纽交所争夺交易数据所有权
查看>>
《精通自动化测试框架设计》—第2章 2.6节使用数据库
查看>>
《网站性能监测与优化》一2.4 软件服务应用网站
查看>>
《HTML5 开发实例大全》——1.26 使用鼠标光标拖动网页中的文字
查看>>
3144: [Hnoi2013]切糕
查看>>
异构数据库
查看>>
iOS.ObjC.Basic-Knowledge
查看>>
iOS.ReactNative-3-about-viewmanager-uimanager-and-bridgemodule
查看>>
透视校正插值
查看>>
【转载】WinCE6.0 Camera驱动源码分析(二)
查看>>
Cobertura代码覆盖率测试
查看>>
【selenium学习笔记一】python + selenium定位页面元素的办法。
查看>>
Linux禁止ping
查看>>
【Matplotlib】 标注一些点
查看>>
[AX]乐观并发控制Optimistic Concurrency Control
查看>>
自定义类加载器
查看>>
MySQL数据库事务各隔离级别加锁情况--Repeatable Read && MVCC(转)
查看>>
C++构造函数例程
查看>>
把某一列值转换为逗号分隔字符串
查看>>
DLL,DML,DCL,TCL in Oracle
查看>>