<强> 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; } 安卓系统截屏截图的几种方法总结