今天做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);}}

哈哈,完美成功了~~~


至此,结束。第一篇稍微正规的博文。各路大神多多指教~~



更多相关文章

  1. 安卓android readonly 无法增删文件
  2. android 使用statfs获得文件路径可用空间大小的方法
  3. android Uri利用及解析(文件操作)以及与路径的相互转换
  4. Android Studio 打不开layout 文件夹下的xml
  5. Android文件管理器与media数据库的同步问题
  6. 【Android Developers Training】 42. 从另一台设备接收文件
  7. android 创建文件夹和文件
  8. 在AndroidManifest.xml文件中的android:windowSoftInputMode属性

随机推荐

  1. Android初级教程调用手机拍照与摄像功能
  2. android内存泄露
  3. Android获取高清app图标代码分享
  4. android判断短信是否发送成功[动态注册广
  5. Android列表实现(1)_数组列表
  6. Android(安卓)SDK无法更新问题
  7. Android 自定义view的写法
  8. 只有安卓才会跳
  9. 超酷的 gankIO 客户端
  10. android 红外