android抓屏详解手机开发

现在无论是应用,还是游戏中,都经常会有分享的功能。分享,不仅要分享文字,也要分享应用或者游戏的屏幕截图,这样才能做到图文并茂,吸引到更多的用户。

想要做图片的分享功能,首先就需要抓屏,将当前屏幕保存为一个图片文件。

下面就是一个将当前的Activity直接保存为一个图片文件的类库,可以直接使用。需要的,直接拿来主义就好了。

  1. package com.gaolei.framework.android.util;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileNotFoundException;  
  5. import java.io.FileOutputStream;  
  6. import java.io.IOException;  
  7.   
  8. import android.app.Activity;  
  9. import android.graphics.Bitmap;  
  10. import android.graphics.Rect;  
  11. import android.view.View;  
  12.   
  13. public class ScreenShot {  
  14.   
  15.     private static Bitmap takeScreenShot(Activity activity) {  
  16.         // View是你需要截图的View  
  17.         View view = activity.getWindow().getDecorView();  
  18.         view.setDrawingCacheEnabled(true);  
  19.         view.buildDrawingCache();  
  20.         Bitmap b1 = view.getDrawingCache();  
  21.   
  22.         // 获取状态栏高度  
  23.         Rect frame = new Rect();  
  24.         activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);  
  25.         int statusBarHeight = frame.top;  
  26.   
  27.         // 获取屏幕长和高  
  28.         int width = activity.getWindowManager().getDefaultDisplay().getWidth();  
  29.         int height = activity.getWindowManager().getDefaultDisplay()  
  30.                 .getHeight();  
  31.         // 去掉标题栏  
  32.         Bitmap b = Bitmap.createBitmap(b1, 0, statusBarHeight, width, height  
  33.                 – statusBarHeight);  
  34.         view.destroyDrawingCache();  
  35.         return b;  
  36.     }  
  37.   
  38.     private static void savePic(Bitmap b, File filePath) {  
  39.         FileOutputStream fos = null;  
  40.         try {  
  41.             fos = new FileOutputStream(filePath);  
  42.             if (null != fos) {  
  43.                 b.compress(Bitmap.CompressFormat.PNG, 100, fos);  
  44.                 fos.flush();  
  45.                 fos.close();  
  46.             }  
  47.         } catch (FileNotFoundException e) {  
  48.             // e.printStackTrace();  
  49.         } catch (IOException e) {  
  50.             // e.printStackTrace();  
  51.         }  
  52.     }  
  53.   
  54.     public static void shoot(Activity a, File filePath) {  
  55.         if (filePath == null) {  
  56.             return;  
  57.         }  
  58.         if (!filePath.getParentFile().exists()) {  
  59.             filePath.getParentFile().mkdirs();  
  60.         }  
  61.         ScreenShot.savePic(ScreenShot.takeScreenShot(a), filePath);  
  62.     }  

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/5647.html

(0)
上一篇 2021年7月17日
下一篇 2021年7月17日

相关推荐

发表回复

登录后才能评论