安卓系统截屏分享功能

  

最近项目需要实现Android截屏分享功能,包括Android截屏获取图片,将图片保存到本地,通知系统相册更新,通过微信,QQ,微博分享截屏图片,本篇文章作为总结回顾。

  

  

,,,通过对视图进行绘制,得到的位图,可以对活动片段进行绘制,也可以对其他的观点进行绘制。

  

, <>强,,1截活动图(带空白的状态栏)

        公共位图shotScreen(活动活动){   .getDecorView视图视图=activity.getWindow () ();   view.setDrawingCacheEnabled(真正的);   view.buildDrawingCache ();   位图的位图=Bitmap.createBitmap (view.getDrawingCache (), 0, 0, view.getMeasuredWidth (), view.getMeasuredHeight ());   view.setDrawingCacheEnabled(假);   view.destroyDrawingCache ();   返回位图;   }      

,, <强>,2活动截图(去掉状态栏)

        公共位图shotActivityNoBar(活动活动){//获取窗口中最顶层的观点   .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;   }      

<强> 3片段截图

        公共位图getFragmentBitmap(片段片段){   视图v=fragment.getView ();   v.buildDrawingCache(假);   返回v.getDrawingCache ();   }      

,,,绘制视图的方式只适用于静态来看,SurfaceView, IjkVideoView等播放视频的观点,不能截取到,此外,某些动画类视图也不能截取到。针对上述情况,可获取SurfaceView的一帧生成位图,将位图进行合,并同理动画类视图也可以合并,例如,最底层播放视频,中间层播放动画,最上层是普通的视图中,可将位图合并,如下:

        公共位图combineBitmapInCenter(背景位图,位图midBitmap,位图前景){   如果(! background.isMutable ()) {   背景=background.copy (Bitmap.Config。ARGB_8888,真正的);   }   涂漆=new ();   帆布画布=新画布(背景);   int bw=background.getWidth ();   int bh=background.getHeight ();   int mw=midBitmap.getWidth ();   int mh=midBitmap.getHeight ();   int mx=(mw - bw)/2;   int=(mh - bh)/2;   画布。drawBitmap (midBitmap mx,我、油漆);   int fw=foreground.getWidth ();   int fh=foreground.getHeight ();   int fx=(fw - bw)/2;   int财政年度=(fh - bh)/2;   画布。drawBitmap(前景、外汇、财政年度、油漆);   canvas.save (Canvas.ALL_SAVE_FLAG);   canvas.restore ();   返回背景;   }      

,,,需要注意:视图的绘制必须在UI线程完成,否则会崩溃,位图的合并会较耗时,需在子线程完成。

  

        公共空间saveBitmapToFile (String文件名,位图的位图){   如果(TextUtils.isEmpty(文件名)| |位图==null)返回;   尝试{   文件f=新文件(文件名);   f.createNewFile ();   FileOutputStream输出信号=new FileOutputStream (f);   bitmap.compress(80年Bitmap.CompressFormat.JPEG,输出端);   fOut.flush ();   fOut.close ();   }捕捉(FileNotFoundException e) {   日志。我(“ScreenShotUtil”、“保存失败”);   e.printStackTrace ();   }捕捉(IOException e) {   e.printStackTrace ();   }   }      

        公共空间AlbumScan(字符串文件名){   MediaScannerConnection.scanFile (mActivity.getApplicationContext()、新String[]{文件名},新String[]{“图像/jpeg”}, null);   }      

  

,,,QQ,通过微信微博分享的sdk实现,如下:

  

, <>强,,1分享到微信朋友圈

        公共空间shareToWexinCircle () {   如果(iShareService.isWeixinInstalled()){//判断微信是否安装   位图mWXShareBitmap=mLatesBitmap;//将截屏得到的位图赋值   WXImageObject imgObject=new WXImageObject (mWXShareBitmap);   WXMediaMessage mediaMessage=new WXMediaMessage ();   mediaMessage。mediaObject=imgObject;   mediaMessage Log.i(标签。”mediaObject=imgObject ");//设置缩略图   位图thumbBmp=Bitmap.createScaledBitmap (mWXShareBitmap、50、80,真);   mediaMessage。thumbData=https://www.yisu.com/zixun/bmpToByteArray (thumbBmp,真实);   Log.i(标签,“设置缩略图”);//请求wx   SendMessageToWX。点播点播=new SendMessageToWX.Req ();   要求的事情。事务=buildTransaction (img ");//分享类型是图片   要求的事情。消息=mediaMessage;   要求的事情。现?SendMessageToWX.Req.WXSceneTimeline;//分享到朋友圈   日志。我(标签,“天气请求”);   IWXAPI api=WXAPIFactory.createWXAPI (mActivity,“微信分享id”,真正的);   api.registerApp(“微信分享id”);   布尔结果=api.sendReq(要求的);   日志。我(标签,“分享圈:“+结果);   其他}{   ToastUtils。显示(mActivity,“您没有安装微信客户端”);   }   }      公共byte [] bmpToByteArray(最后一个位图bmp,最终布尔needRecycle) {   ByteArrayOutputStream输出=new ByteArrayOutputStream ();   bmp.compress (Bitmap.CompressFormat.PNG、100、输出);   如果(needRecycle) {   bmp.recycle ();   }   结果byte []=output.toByteArray ();   尝试{   output.close ();   }捕捉(异常e) {   e.printStackTrace ();   }   返回结果;   }      & lt;以前的名字=按搿眂lass=癹ava”在私人字符串buildTransaction(最终字符串类型){   返回(类型==null) & # 63;String.valueOf (System.currentTimeMillis()):类型+ System.currentTimeMillis ();   }& lt;/pre>   & lt; h4> & lt; name=" t8祝辞& lt;/a> & lt; br>

安卓系统截屏分享功能