有一个朋友问做过截屏的小功能没,自己没有做过。但是想了一下,实现的过程。实现截屏就是为了截取咱们应用中的部分布的局,然后实现将保存在本地,或将其分享,或将其通过第三方的平台分享出去。自己可能是受了截屏这两个字的影响,想当然的去梳理自己的实现思路。
1:截屏,调用系统的截屏功能区实现截屏。
2:对图片进行处理:截屏是截取的手机的全屏,因为我们是需要截取我们的应用的某一部分,所以我们需要去通过剪切裁剪,去裁剪出自己想要保留的一部分(实质也就是保存布局)。
3:后续也许还要处理系统截屏功能本身所有的分享等其他的功能。反正就是会有各种问题。
上面有一个词儿是“保存布局”。意思就是将我们的布局保存成为图片。我听到这个之后,今天到公司的第一件事儿就是自己去实现一下所谓的截屏这个功能。
0:设置权限
& lt; uses-permission android: name=" android.permission。WRITE_EXTERNAL_STORAGE”/比; & lt; uses-permission android: name=" android.permission。READ_EXTERNAL_STORAGE "/祝辞
1:获取布局
relativeLayout=(使用)findViewById (R.id.layout_rl);
2:设置布局相关设置
//获取图片某布的局 relativeLayout.setDrawingCacheEnabled(真正的);relativeLayout.buildDrawingCache ();
3。获取图片
最后一位图bmp=relativeLayout.getDrawingCache ();//获取图片 savePicture (bmp, test.jpg ");//保存图片
4:保存图片
公共空间savePicture(位图bm,字符串文件名){ 日志。我(“兴”、“savePicture: - - - - - - - - - - - - - - - - - - - - - - - -”); 如果(null==bm) { 日志。我(“兴”、“savePicture: - - - - - - - - - - - - - - - - - -图片为空- - - - - -”); 返回: } .getAbsolutePath文件fod=新文件(Environment.getExternalStorageDirectory()() +/测试); 如果(! foder.exists ()) { foder.mkdirs (); } 文件名文件myCaptureFile=新文件(fod); 尝试{ 如果(! myCaptureFile.exists ()) { myCaptureFile.createNewFile (); } BufferedOutputStream bos=new BufferedOutputStream(新FileOutputStream (myCaptureFile));//压缩保存到本地 bm.compress(90年Bitmap.CompressFormat.JPEG bos); bos.flush (); bos.close (); }捕捉(IOException e) { e.printStackTrace (); } 吐司。makeText(这个,”保存成功!”Toast.LENGTH_SHORT),告诉(); } >之前5:释放资源
relativeLayout.destroyDrawingCache ();6日完整代码如下
包com.adwan.savephototolocal; 进口android.graphics.Bitmap; 进口android.os.Environment; 进口handler; 进口android.support.v7.app.AppCompatActivity; 进口android.os.Bundle; 进口android.util.Log; 进口android.view.View; 进口android.widget.RelativeLayout; 进口android.widget.Toast; 进口java.io.BufferedOutputStream; 进口java.io.File; 进口java.io.FileOutputStream; 进口java.io.IOException; 公开课MainActivity延伸AppCompatActivity { 私人RelativeLayout使用; 私人处理程序mHandler=new处理程序(); @Override 保护无效onCreate(包savedInstanceState) { super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); relativeLayout=(使用)findViewById (R.id.layout_rl); } 公共空间保存(查看视图){ initView (); } 私人空间initView () {//获取图片某布的局 relativeLayout.setDrawingCacheEnabled(真正的); relativeLayout.buildDrawingCache (); mHandler。postDelayed(新Runnable () { @Override 公共空间run () {//要在运行在子线程中 最后一位图bmp=relativeLayout.getDrawingCache ();//获取图片 savePicture (bmp, test.jpg ");//保存图片 relativeLayout.destroyDrawingCache ();//保存过后释放资源 } }, 100); } 公共空间savePicture(位图bm,字符串文件名){ 日志。我(“兴”、“savePicture: - - - - - - - - - - - - - - - - - - - - - - - -”); 如果(null==bm) { 日志。我(“兴”、“savePicture: - - - - - - - - - - - - - - - - - -图片为空- - - - - -”); 返回: } .getAbsolutePath文件fod=新文件(Environment.getExternalStorageDirectory()() +/测试); 如果(! foder.exists ()) { foder.mkdirs (); } 文件名文件myCaptureFile=新文件(fod); 尝试{ 如果(! myCaptureFile.exists ()) { myCaptureFile.createNewFile (); } BufferedOutputStream bos=new BufferedOutputStream(新FileOutputStream (myCaptureFile));//压缩保存到本地 bm.compress(90年Bitmap.CompressFormat.JPEG bos); bos.flush (); bos.close (); }捕捉(IOException e) { e.printStackTrace (); } 吐司。makeText(这个,”保存成功!”Toast.LENGTH_SHORT),告诉(); } }Android中布局保存成图片实例代码