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


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


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


1
2
3
4
5
    protected  void  onDraw(Canvas canvas)
    public  void  buildDrawingCache()
    public  void  destroyDrawingCache()
    public  Bitmap getDrawingCache()
    public  void  setDrawingCacheEnabled( boolean  enabled)


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

  

1.View转Bitmap

   

1
2
3
4
5
6
7
8
9
10
11
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,不带状态栏

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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(类似锤子便签的截长图)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  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;
     }