& # 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实现截屏方式整理(总结)