Android View转化Bitmap

在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;
    }
时间: 2024-11-02 23:39:16

Android View转化Bitmap的相关文章

android view 转Bitmap 生成截图

文章链接:https://mp.weixin.qq.com/s/FQmYfT-KYiDbp-0HzK_Hpw 项目中经常会用到分享的功能,有分享链接也有分享图片,其中分享图片有的需要移动端对屏幕内容进行截取分享,说白了就是将view 转成bitmap 再到图片分享,还有一种情况是将不可见的view 转成bitmap ,这种view是没有直接显示在界面上的,需要我们使用inflate 进行创建的view. 第一种 先看通过 DrawingCache 方法来截取普通的view,获取它的视图(Bitm

Android中实现Bitmap在自定义View中的放大与拖动

一:基本实现思路 基于View类实现自定义View –MyImageView类.在使用View的Activity类中完成OnTouchListener接口,实现对自定义View的触摸事件监听 放大与拖动 基于单点触控实现Bitmap对象在View上的拖动.并且检测View的边缘,防止拖动过界.基于两个点触控实现Bitmap对象在View上的放大.并且检测放大倍数.基于Matrix对象实现对Bitmap在View上放大与平移变换 Bitmap对象在View中的更新与显示 通过重载onDraw方法,

Android中View转换为Bitmap及getDrawingCache=null的解决方法

1.前言 Android中经常会遇到把View转换为Bitmap的情形,比如,对整个屏幕视图进行截屏并生成图片:Coverflow中需要把一页一页的view转换为Bitmap.以便实现复杂的图形效果(阴影.倒影效果等):再比如一些动态的实时View为便于观察和记录数据.需要临时生成静态的Bitmap. 2.实现方法 1)下面是笔者经常用的一个转换方法 public static Bitmap convertViewToBitmap(View view, int bitmapWidth, int

一个Android实数转化二进制的计算器

导言: 这是我自己写的第一个小应用,没有什么优化,没有追求图标好看,就是搜索来的代码堆砌,等将来学完设计模式还有重构的话可能还会来改. 我觉得这个里面最考验我的就是小数转化为二进制的问题了,当然整数转二进制很容易,不过因为浮点数在计算机中的储存方式并不是正常人类思维的方式,因此我费了很大的力气才尽可能的实现了这样的模块.希望看到的读者有好的方法或是我的代码逻辑有错误,请不吝赐教,先谢过. 开始,新建项目-B2D(起反了)....一路默认就是了 构建界面 步骤1-声明应用的字符串在strings.

android 细节之android.view.InflateException: Binary XML file line #95: Error inflating class(out of m)

今天的异常很有意思,叫做android.view.InflateException: Binary XML file line #95: Error inflating class(out of memory) . 其实是因为out of memory,导致 xml是不可能被充气成功,因此activity的onCreate方法中, setContentView(R.layout.***)也就不可能成功调用. 他出现在我有多个教学动画,并且播放的动画,是基于imageView,imageView的

android:GLSurfaceView绘制bitmap图片及glViewport调整的效果

首先看一下GLSurfaceView是怎样绘制的.正如android开发文档中描写叙述的那样,我们须要new一个GLSurfaceView对象,然后设置一个实现了Renderer接口的对象,我们须要写一个MyRender类,实现Renderer的方法等等.我们先看一下Activity的写法.它不须要一个布局文件,我们将GLSurfaceView对象作为activity的contentview就可以.例如以下: package net.mobctrl.glsurfaceviewbmp; impor

Android View转换成图片保存

package zhangphil.viewtoimage; import java.io.File; import java.io.FileOutputStream; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.view.View; import android.widget.Button; import android.widget.Tex

【Android实战】Bitmap图片的截屏、模糊处理、传递、使用

项目中遇到了这样一个需求: 当某个条件满足时就截取当前屏幕.并跳转到另外一个页面,同一时候将这个截屏图片作为下一个页面的背景图片,同一时候背景图片须要模糊处理 接下来就一步一步解决这个问题: 1.截取无状态栏的当前屏幕图片.请參考takeScreenShot方法 2.使图片高斯模糊的方法请參考blurBitmap方法 注意:RenderScript是Android在API 11之后增加的,用于高效的图片处理,包含模糊.混合.矩阵卷积计算等 public class ScreenShotUtil

Android View之用户界面...

PS:Android的控件真的是很多...现在还在忙到控件...也是神了.... 学习内容: 1.Spinner下拉菜单... 2.AutoComplete TextView自动完成文本框... 1.Spinner下拉菜单....   下拉菜单,这个是非常熟悉的...这个大部分应用基本是有的...比较常用,相对而言,挺简单的,就是有些地方不那么容易理解而已...Spinner这个东西需要使用到适配器...那什么是适配器呢?到底是干什么用的呢?就是将我们保存的数据更好的显示在View上...这就是