view保存为图片

一、概述

简书、微博、便签等都有将文章保存为图片的功能。笔者臆测,此功能的实现原理如下。

二、实现

2.1将View保存成Bitmap对象

    方法1(亲测有效)
    private Bitmap makingView2Bitmap(View view) {
        if (view == null) {
            return null;
        }
        Bitmap screenshot;
        screenshot = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas c = new Canvas(screenshot);
        view.draw(c);
        return screenshot;
    }

View成员方法getDrawingCache(),其源码如下(有问题,得出来的Bitmap始终为null)下次解决

    //android源码
    /**
     * <p>Calling this method is equivalent to calling <code>getDrawingCache(false)</code>.</p>
     *
     * @return A non-scaled bitmap representing this view or null if cache is disabled.
     *
     * @see #getDrawingCache(boolean)
     */
    public Bitmap getDrawingCache() {
        return getDrawingCache(false);
    }

参考文章
http://www.tuicool.com/articles/RvIjeib
http://blog.csdn.net/huangbiao86/article/details/9053429/
http://www.2cto.com/kf/201602/488933.html

2.2将Bitmap保存成本地文件(图片)

这个问题比较简单,就是平常的保存文件,这里只放核心代码。如不知如何保存文件,请自行百度

    bm.compress(Bitmap.CompressFormat.PNG, 100, new FileOutputStream(file));//file为保存文件

三、特别说明

1、Bitmap.CompressFormat.JPEG据说得到的背景是黑色的,PNG得到的是白色的
2、TextView截取时,背景默认是黑色的(这也造成我第一次保存的时候,发现缩略图是好好的(白底黑字),但是点进去查看的时候是全黑(黑底黑字))
在截取之前,最好做如下设置:

    mTvContent.setTextColor(getResources().getColor(R.color.black));
    mTvContent.setBackgroundColor(getResources().getColor(R.color.white));

这样得到的图片就是正常的白底黑字

posted @ 2016-04-19 11:14  NeilLee  阅读(797)  评论(0编辑  收藏  举报