当前位置:   article > 正文

View转换为Bitmap_view转为bitmap

view转为bitmap

在Android中所有的控件都是View的直接子类或者间接子类,通过它们可以组成丰富的UI界面。在窗口显示的时候Android会把这些控件都加载到内存中,形成一个以ViewRoot为根节点的控件树,然后由根节点开始逐级把控件绘制到屏幕上。

可以通过调用控件的setDrawingCacheEnabled(true)方法,开启绘图缓存功能,在绘制View的时候把图像缓存起来,然后通过getDrawingCache()方法获取这个缓存的Bitmap。需要注意的是,当不再使用这个Bitmap时,需要调用destroyDrawingCache()方法,释放Bitmap资源。由于在绘制View到屏幕时缓存图像会降低控件绘制的效率,因此只会在需要使用View的图像缓存的时候才调用setDrawingCacheEnabled(true)方法开启图像缓存功能,当不再使用图像缓存时需要调用setDrawingCacheEnabled(false) 关闭图像缓存功能。

这种方法在支持拖拽类型的应用中经常见到,在Android系统的Launcher应用中也使用了这种方法,当用户拖拽应用的快捷图标时,获取到控件对应的Bitmap,然后操作这个Bitmap随着手指移动。

下面通过一段代码来说明如何获取View对应的Bitmap。在代码中使用了两个ImageView并给它们都设置了显示的图片资源,然后把第一个ImageView对应的bitmap显示到第二个ImageView中。由于在Activity的onCreate方法中调用这个方法,当执行Activity的onCreate方法时,控件还没有准备好,所以需要使用Handler进行延迟操作,Java代码如下:

  // View转换为Bitmap
  public void getDrawingCache(final ImageView sourceImageView, final ImageView destImageView) {

    new Handler().postDelayed(new Runnable() {

      @Override
      public void run() {
        // TODO Auto-generated method stub
        // 开启bitmap缓存
        sourceImageView.setDrawingCacheEnabled(true);
        // 获取bitmap缓存
        Bitmap mBitmap = sourceImageView.getDrawingCache();
        // 显示 bitmap
        destImageView.setImageBitmap(mBitmap);

        // Bitmap mBitmap = sourceImageView.getDrawingCache();
        // Drawable drawable = (Drawable) new BitmapDrawable(mBitmap);
        // destImageView.setImageDrawable(drawable);

        new Handler().postDelayed(new Runnable() {

          @Override
          public void run() {
            // TODO Auto-generated method stub
            // 不再显示bitmap缓存
            // destImageView.setImageBitmap(null);
            destImageView.setImageResource(R.drawable.pet);

            // 使用这句话而不是用上一句话是错误的,空指针调用
            // destImageView.setBackgroundDrawable(null);

            // 关闭bitmap缓存
            sourceImageView.setDrawingCacheEnabled(false);
            // 释放bitmap缓存资源
            sourceImageView.destroyDrawingCache();
          }
        }, DELAY_TIME);
      }
    }, DELAY_TIME);
  }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/262185
推荐阅读
相关标签
  

闽ICP备14008679号