安卓系统截屏截图的几种方法总结

  

<强> Android截屏
  

  

Android截屏的原理:获取具体需要截屏的区域的位图,然后绘制在画布上,保存为图片后进行分享或者其它用途
  

  

<强>一、活动截屏
  

  

1,截活动界面(包含空白的状态栏)
  

     /* *   *根据指定截的活动图(带空白的状态栏)   *   * @param上下文要截图的活动   * @return位图   */公共静态位图shotActivity(活动上下文){   .getDecorView视图视图=context.getWindow () ();   view.setDrawingCacheEnabled(真正的);   view.buildDrawingCache ();      位图的位图=Bitmap.createBitmap (view.getDrawingCache (), 0, 0, view.getMeasuredWidth (), view.getMeasuredHeight ());   view.setDrawingCacheEnabled(假);   view.destroyDrawingCache ();   返回位图;   }   之前      

<强> 2,截活动界面(去除状态栏)
  

     /* *   *根据指定截的活动图(去除状态栏)   *   * @param活动要截图的活动   * @return位图   */公共位图shotActivityNoStatusBar(活动活动){//获取窗口中最顶层的观点   .getDecorView视图视图=activity.getWindow () ();   view.buildDrawingCache ();//获取状态栏高度   矩形矩形=new矩形();   view.getWindowVisibleDisplayFrame(矩形);   int statusBarHeights=rect.top;   显示器显示=activity.getWindowManager () .getDefaultDisplay ();//获取屏幕宽和高   int宽度=display.getWidth ();   int高度=display.getHeight ();//允许当前窗口保存缓存信息   view.setDrawingCacheEnabled(真正的);//去掉状态栏   位图bmp=Bitmap.createBitmap (view.getDrawingCache (), 0,   statusBarHeights,宽度,高度,statusBarHeights);//销毁缓存信息   view.destroyDrawingCache ();      返回bmp;   }   之前      

<强>二、查看截屏
  

     /* *   *根据指定的视图截的图   *   * @param v要截图的视图   * @return位图   */公共静态位图getViewBitmap(查看v) {   如果(null==v) {   返回null;   }   v.setDrawingCacheEnabled(真正的);   v.buildDrawingCache ();   如果(Build.VERSION。SDK_INT祝辞=11){   View.MeasureSpec.EXACTLY v.measure (View.MeasureSpec.makeMeasureSpec (v.getWidth ()),   View.MeasureSpec.EXACTLY View.MeasureSpec.makeMeasureSpec (v.getHeight ()));   v.layout ((int) v.getX (), (int) v.getY (), (int) v.getX v.getMeasuredWidth () + (), (int) v.getY v.getMeasuredHeight () + ());   其他}{   v.measure (View.MeasureSpec。View.MeasureSpec.UNSPECIFIED makeMeasureSpec (0),   View.MeasureSpec。View.MeasureSpec.UNSPECIFIED makeMeasureSpec (0));   v。布局(0,0,v.getMeasuredWidth (), v.getMeasuredHeight ());   }      位图的位图=Bitmap.createBitmap (v.getDrawingCache (), 0, 0, v.getMeasuredWidth (), v.getMeasuredHeight ());   v.setDrawingCacheEnabled(假);   v.destroyDrawingCache ();   返回位图;   }   之前      

<强>三,滚动视图截屏:滚动视图只有一个childView,虽然没有全部显示在界面上,但是已经全部渲染绘制,因此可以直接调用scrollView.draw(画布)来完成截图
  

     /* *   *滚动视图截屏   *   * @param scrollView要截图的滚动视图   * @return位图   */公共静态位图shotScrollView (ScrollView ScrollView) {   int h=0;   位图的位图=零;   for (int i=0;我& lt;scrollView.getChildCount ();我+ +){   h +=scrollView.getChildAt (i) .getHeight ();   scrollView.getChildAt(我).setBackgroundColor (Color.parseColor (" # ffffff "));   }   位图=Bitmap.createBitmap (scrollView.getWidth (), h, Bitmap.Config.RGB_565);   最后帆布画布=新画布(位图);   scrollView.draw(画布);   返回位图;   }   之前      

<强>四,ListView截屏:视图是会回收与重用物品,并且只会绘制在屏幕上显示的ItemView、下面的方法采用一个列表来存储物品的视图,这种方案依然不够好,当项目足够多的时候,可能会发生伯父。
  

     /* *   * ListView截的图   *   * @param listView要截图的视图   * @return位图   */公共静态位图shotListView(列表视图列表视图){   ListAdapter适配器=listView.getAdapter ();   int itemsCount=adapter.getCount ();   int allItemsHeight=0;      ArrayList,每个位置=new ArrayList<的在();   for (int i=0;我& lt;itemsCount;我+ +){   视图childView=适配器。getView(我空列表视图);   View.MeasureSpec.EXACTLY childView.measure (View.MeasureSpec.makeMeasureSpec (listView.getWidth ()),   View.MeasureSpec.UNSPECIFIED View.MeasureSpec.makeMeasureSpec (0));      childView。布局(0,0,childView.getMeasuredWidth (), childView.getMeasuredHeight ());   childView.setDrawingCacheEnabled(真正的);   childView.buildDrawingCache ();   bmps.add (childView.getDrawingCache ());   allItemsHeight +=childView.getMeasuredHeight ();   }      位图bigBitmap=Bitmap.createBitmap (listView.getMeasuredWidth (), allItemsHeight, Bitmap.Config.ARGB_8888);   帆布bigCanvas=新画布(bigBitmap);      涂漆=new ();   int iHeight=0;      for (int i=0;我& lt;bmps.size ();我+ +){   位图bmp=bmps.get(我);   bigCanvas。drawBitmap (bmp 0 iHeight、油漆);   iHeight +=bmp.getHeight ();      bmp.recycle ();   bmp=零;   }   返回bigBitmap;   }      

安卓系统截屏截图的几种方法总结