Android屏幕快照(or Android截屏)
16lz
2021-01-23
今天做Android项目的时候用到了屏幕快照这个东西,就是如何将屏幕截屏下来并进行保存。虽然不难,但是记录下来,以备不时。代码直接拷贝进项目中即可使用。
屏幕快照ScreenShot类:
packagecom.cloudclassroom.student.common;importjava.io.FileOutputStream;importandroid.app.Activity;importandroid.graphics.Bitmap;importandroid.graphics.Rect;importandroid.util.Log;importandroid.view.View;importandroid.widget.Toast;/***@authorRickey*<p>*2015年8月16日下午5:40:47**@TODO屏幕快照公共类*/publicclassScreenShot{/***获取指定Activity的截屏,保存到png文件*@paramactivity*@return*/privatestaticBitmaptakeScreenShot(Activityactivity){//View是需要截图的ViewViewview=activity.getWindow().getDecorView();view.setDrawingCacheEnabled(true);view.buildDrawingCache();Bitmapb1=view.getDrawingCache();//获取状态栏高度Rectframe=newRect();activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);intstatusBarHeight=frame.top;Log.i("TAG",""+statusBarHeight);//获取屏幕长和高intwidth=activity.getWindowManager().getDefaultDisplay().getWidth();intheight=activity.getWindowManager().getDefaultDisplay().getHeight();//去掉标题栏//Bitmapb=Bitmap.createBitmap(b1,0,25,320,455);Bitmapb=Bitmap.createBitmap(b1,0,statusBarHeight,width,height-statusBarHeight);view.destroyDrawingCache();returnb;}/***保存到sdcard*@paramb位图*@paramstrFileName保存路径*/privatestaticvoidsavePic(Bitmapb,StringstrFileName){FileOutputStreamfos=null;try{fos=newFileOutputStream(strFileName);if(null!=fos){b.compress(Bitmap.CompressFormat.PNG,90,fos);fos.flush();fos.close();}}catch(Exceptione){Toast.makeText(CommonVariable.Context,"快照失败",Toast.LENGTH_SHORT).show();}}/***屏幕快照程序入口*@paramactivity需要获得快照的activity实例*/publicstaticvoidshoot(Activityactivity){//此处的第二个参数改为自己的保存路径+文件名即可ScreenShot.savePic(ScreenShot.takeScreenShot(activity),FileHelper.imgPath+FileHelper.getPNGPictureFileName());}}
上面的代码中,我使用了同一文件管理类FileHelper类,此类就是负责管理所以文件的存储路径以及创建文件夹,如果是直接将文件保存在SD卡根目录中, 可以不用创建文件夹(即下面都是白说,可以不用理会。),直接将路径写入即可。
同一文件管理类FileHelper类:
packagecom.cloudclassroom.student.common;importjava.io.File;importandroid.os.Environment;/***@authorRickey*<p>*2015-07-282:37:33PM**@TODO文件操作类*/publicclassFileHelper{/***sd卡目录*/publicstaticfinalStringsdkPath=Environment.getExternalStorageDirectory().getPath()+"/CloudClassroom_Student/";/***图片路径*/publicstaticfinalStringimgPath=sdkPath+"img/";/***使用时间作为图片文件名,如“120726113136817.png”**@paramR_SRART_TIME*@return文件全名*/publicstaticStringgetPNGPictureFileName(){returnSystem.currentTimeMillis()+".png";}/***sd卡是否可用**@return*/publicstaticbooleanisSDKEnable(){returnEnvironment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);}/***create:zyf*<p>*createdate:2015-7-28下午4:28:03*<p>*类名:FileHelper.java*<p>*方法描述:文件是否存在,主要是创建父文件夹**@paramfileName*/publicstaticvoidisFileDirEx(StringfileName){isFileDirEx(newFile(fileName));}publicstaticvoidisFileDirEx(Filefile){Fileparent=file.getParentFile();if(!parent.exists()){parent.mkdirs();}}}
在使用FileHelper类之前,必须要先对文件路径进行创建,即必须要先执行isFileDirEx()方法对文件路径中出现的文件夹进行创建,然后才能进行文件的写入等操作。在我的项目中,由于我所有的activity都是继承我自定义的基类MainAPP类,所以我在MainAPP类中的onCreate()方法中添加下面一句就一劳永逸了~~如下:
FileHelper.isFileDirEx(FileHelper.imgPath+FileHelper.getPNGPictureFileName());//初始化创建图片保存路径父文件夹
到此,一切工作都已经准备完毕,现在可以调用,试试效果如何~~
我在我的界面中,定义一个按钮进行触发,在按钮的单击监听事件里执行下面代码:
@OverridepublicvoidonClick(Viewv){//TODO自动生成的方法存根if(v==Button_Snapshot){//快照ScreenShot.shoot(this);}}
哈哈,完美成功了~~~
至此,结束。第一篇稍微正规的博文。各路大神多多指教~~
更多相关文章
- 安卓android readonly 无法增删文件
- android 使用statfs获得文件路径可用空间大小的方法
- android Uri利用及解析(文件操作)以及与路径的相互转换
- Android Studio 打不开layout 文件夹下的xml
- Android文件管理器与media数据库的同步问题
- 【Android Developers Training】 42. 从另一台设备接收文件
- android 创建文件夹和文件
- 在AndroidManifest.xml文件中的android:windowSoftInputMode属性