Android实现截屏方式整理(总结)

  

& # 65279;本文介绍了Android实现截屏方式整理,分享给大家。希望对大家有帮助
  

  

可能的需求:

  
      <李>截自己的屏李   <李>截所有的屏李   <李>带导航栏截屏李   <李>不带导航栏截屏李   <李>截屏并编辑选取一部分   <李>自动截取某个空间或者布局李   <李>截取长图   <李>在后台去截屏李   
  

<强> 1。只截取自己应用内部界面

  

<强> 1.1截取除了导航栏之外的屏幕

        .getDecorView视图dView=getWindow () ();   dView.setDrawingCacheEnabled(真正的);   dView.buildDrawingCache ();   位图的位图=Bitmap.createBitmap (dView.getDrawingCache ());   如果(位图!=null) {   尝试{//获取内置SD卡路径   .getPath字符串sdCardPath=Environment.getExternalStorageDirectory () ();//图片文件路径   字符串filePath=sdCardPath +文件。分离器+“screenshot.png”;   文件文件=新文件(filePath);   FileOutputStream os=new FileOutputStream(文件);   bitmap.compress (Bitmap.CompressFormat.PNG 100操作系统);   os.flush ();   os.close ();   DebugLog。d (“a7888”、“存储完成”);   }捕捉(异常e) {   }   }      

<强> 1.2截取某个控件或者区域

  

<强>两种方案:

  

跟上面差不多,只不过视图不适用根视图,而是使用某个某个控件。
  

        视图dView=标题;   dView.setDrawingCacheEnabled(真正的);   dView.buildDrawingCache ();   位图的位图=Bitmap.createBitmap (dView.getDrawingCache ());      

手动画
  

        视图dView=titleTv;   位图的位图=Bitmap.createBitmap (dView.getWidth (), dView.getHeight (), Bitmap.Config.ARGB_8888);//使用画布,调用自定义观控件的onDraw方法,绘制图片   帆布画布=新画布(位图);   dView.draw(画布);      

<强> 1.3截取带导航栏的整个屏幕

  

& # 8203;这一小节会将一些理论上可以,但是实践会特别复杂,不太推荐使用。可以学习了解。

  

亚行命令   

这里指的不是连接电脑进行亚行操控,而是在应用程序内部实现亚行命令的操控

  

在APK中调用“亚行壳screencap -pfilepath”命令

  

该命令读取系统的framebuffer,需要获得系统权限:

  

(1)。在AndroidManifest.xml文件中添加

        & lt; uses-permissionandroid: name=" android.permission.READ_FRAME_BUFFER "/祝辞      

(2)。修改APK为系统权限,将APK放到源码中编译,修改Android.mk

        LOCAL_CERTIFICATE:=平台   publicvoid takeScreenShot () {   字符串mSavedPath=Environment.getExternalStorageDirectory() +文件。分离器+”截图。png”;   尝试{   运行时。getRuntime ()。exec (screencap - p + mSavedPath);   }捕捉(异常e) {   e.printStackTrace ();   }      

利用系统的隐藏API,实现截图,这部分代码是系统隐藏的,需要在源码下编译。

  

1)。修改Android。可,添加系统权限
  

        LOCAL_CERTIFICATE:=平台      

2)。修改AndroidManifest。xml文件,添加权限
  

        & lt; uses-permissionandroid: name=" android.permission.READ_FRAME_BUFFER "/祝辞            公共布尔takeScreenShot(字符串imagePath) {   如果(imagePath。=(" ")){   imagePath=Environment.getExternalStorageDirectory() +文件。分离器+”截图。png”;   }      位图mScreenBitmap;   WindowManager mWindowManager;   DisplayMetrics mDisplayMetrics;   显示mDisplay;      mWindowManager=(WindowManager) mcontext.getSystemService (Context.WINDOW_SERVICE);   mDisplay=mWindowManager.getDefaultDisplay ();   mDisplayMetrics=new DisplayMetrics ();   mDisplay.getRealMetrics (mDisplayMetrics);      []={mDisplayMetrics dim浮动。widthPixels mDisplayMetrics。heightPixels};   mScreenBitmap=表面。截图((int)降低[0],(int) [1] dim);      如果(mScreenBitmap==null) {   返回错误;   }      尝试{   FileOutputStream=新FileOutputStream (imagePath);   mScreenBitmap.compress (Bitmap.CompressFormat。PNG, 100年);      }捕捉(异常e) {         返回错误;   }      返回true;   }   

Android实现截屏方式整理(总结)