当前位置:   article > 正文

Android中将页面的某一部分布局转成图片显示,可上传或保存到本地_android 布局生成图片显示到小布局中

android 布局生成图片显示到小布局中

想要把页面中的某一部分布局转成图片,这里使用了一种比较简单的做法,那就是View组件显示的内容可以通过cache机制保存为bitmap,我们要获取它的cache先要通过setDrawingCacheEnable方法把cache开启,然后再调用getDrawingCache方法就可 以获得view的cache图片了。

buildDrawingCache方法可以不用调用,因为调用getDrawingCache方法时,若果 cache没有建立,系统会自动调用buildDrawingCache方法生成cache。若果要更新cache, 必须要调用destoryDrawingCache方法把旧的cache销毁,才能建立新的。

当调用setDrawingCacheEnabled方法设置为false, 系统也会自动把原来的cache销毁。

获取cache通常会占用一定的内存,所以通常不需要的时候有必要对其进行清理,通过destroyDrawingCache或setDrawingCacheEnabled(false)实现。

  1. view.setDrawingCacheEnabled(true);
  2. view.buildDrawingCache();
  3. Bitmap bitmap = view.getDrawingCache();

代码中的view就是要转换成图片的布局,可以是LinearLayout、RelativeLayout等布局。得到的bitmap可以直接显示在ImageView上,,如果要上传到服务端,可以将得到的bitmap图片转换成Base64字符串String上传。

  1. // 把Bitmap图片转换成Base64字符串String
  2. public static String bitmapToString(Bitmap bitmap) {
  3. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  4. // 1.5M的压缩后在100Kb以内,测试得值,压缩后的大小=94486字节,压缩后的大小=74473字节
  5. // 这里的JPEG 如果换成PNG,那么压缩的就有600kB这样.
  6. // 实际项目中,可以根据需要考虑图片压缩以及压缩的质量。
  7. bitmap.compress(Bitmap.CompressFormat.JPEG, 40, baos);
  8. byte[] b = baos.toByteArray();
  9. // 在这里获取到图片转换后的字符串,然后就可以将这个字符串当做普通的String字符串参数传给后台
  10. // 如果有很多张图片要上传,那么可以考虑将转换后的Base64字符串添加到一个List里面,一并传给后台。
  11. return android.util.Base64.encodeToString(b, android.util.Base64.DEFAULT);
  12. }
  13. // 根据路径获得图片并压缩,返回bitmap用于显示
  14. public static Bitmap getSmallBitmap(String filePath) {
  15. final BitmapFactory.Options options = new BitmapFactory.Options();
  16. options.inJustDecodeBounds = true;
  17. BitmapFactory.decodeFile(filePath, options);
  18. options.inSampleSize = calculateInSampleSize(options, 480, 800);
  19. options.inJustDecodeBounds = false;
  20. return BitmapFactory.decodeFile(filePath, options);
  21. }
  22. //计算图片的缩放质量
  23. public static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) {
  24. final int height = options.outHeight;
  25. final int width = options.outWidth;
  26. int inSampleSize = 1;
  27. if (height > reqHeight || width > reqWidth) {
  28. final int heightRatio = Math.round((float) height/ (float) reqHeight);
  29. final int widthRatio = Math.round((float) width / (float) reqWidth);
  30. inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
  31. }
  32. return inSampleSize;
  33. }

也可以将bitmap图片保存到本地

  1. public String sdCardDir = Environment.getExternalStorageDirectory() + "/myImage/";
  2. private void saveBitmap(Bitmap bitmap) {
  3. try {
  4. File dirFile = new File(sdCardDir);
  5. if (!dirFile.exists()) { //如果不存在,则新建这个文件夹
  6. dirFile.mkdirs();
  7. }
  8. File file = new File(sdCardDir, imageName + ".jpg");
  9. FileOutputStream fos = new FileOutputStream(file);
  10. bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
  11. fos.flush();
  12. fos.close();
  13. } catch (FileNotFoundException e) {
  14. e.printStackTrace();
  15. } catch (IOException e) {
  16. e.printStackTrace();
  17. }
  18. // 把文件插入到系统图库
  19. try {
  20. MediaStore.Images.Media.insertImage(this.getContentResolver(),
  21. file.getAbsolutePath(), fileName, null);
  22. } catch (FileNotFoundException e) {
  23. e.printStackTrace();
  24. }
  25. // 通知图库更新
  26. sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
  27. Uri.parse("file://" + "/sdcard/namecard/")));
  28. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/262048
推荐阅读
相关标签
  

闽ICP备14008679号