Android中布局保存成图片实例代码

  

  

有一个朋友问做过截屏的小功能没,自己没有做过。但是想了一下,实现的过程。实现截屏就是为了截取咱们应用中的部分布的局,然后实现将保存在本地,或将其分享,或将其通过第三方的平台分享出去。自己可能是受了截屏这两个字的影响,想当然的去梳理自己的实现思路。

  

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中布局保存成图片实例代码