当前位置:   article > 正文

Android 生成图片,保存到本地

android 生成图片

首先定义一个生成图片的工具类,根据xml文件生成图片

  1. public class ShareView extends FrameLayout {
  2. private final int IMAGE_WIDTH = 720;
  3. private final int IMAGE_HEIGHT = 1280;
  4. private TextView tvInfo;
  5. public ShareView(@NonNull Context context) {
  6. super(context);
  7. init();
  8. }
  9. private void init() {
  10. View layout = View.inflate(getContext(), R.layout.share_view_layout, this);
  11. tvInfo = (TextView) layout.findViewById(R.id.tv_info);
  12. }
  13. /**
  14. * 设置相关信息
  15. *
  16. * @param info
  17. */
  18. public void setInfo(String info) {
  19. tvInfo.setText(info);
  20. }
  21. /**
  22. * 生成图片
  23. *
  24. * @return
  25. */
  26. public Bitmap createImage() {
  27. //由于直接new出来的view是不会走测量、布局、绘制的方法的,所以需要我们手动去调这些方法,不然生成的图片就是黑色的。
  28. int widthMeasureSpec = MeasureSpec.makeMeasureSpec(IMAGE_WIDTH, MeasureSpec.EXACTLY);
  29. int heightMeasureSpec = MeasureSpec.makeMeasureSpec(IMAGE_HEIGHT, MeasureSpec.EXACTLY);
  30. measure(widthMeasureSpec, heightMeasureSpec);
  31. layout(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT);
  32. Bitmap bitmap = Bitmap.createBitmap(IMAGE_WIDTH, IMAGE_HEIGHT, Bitmap.Config.ARGB_8888);
  33. Canvas canvas = new Canvas(bitmap);
  34. draw(canvas);
  35. return bitmap;
  36. }
  37. }

定义了一个setInfo方法,可以从外部传入相关的信息,createImage方法用于生成最终的图片,由于直接new出来的view是不会走测量、布局、绘制的方法的,所以需要我们手动去调这些方法,不然生成的图片就是黑色的。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="720px"
  4. android:layout_height="1280px"
  5. android:orientation="vertical"
  6. android:background="#ffffff">
  7. <TextView
  8. android:id="@+id/tv_info"
  9. android:layout_width="match_parent"
  10. android:layout_height="0dp"
  11. android:layout_marginBottom="20px"
  12. android:layout_marginTop="20px"
  13. android:layout_weight="1"
  14. android:gravity="center_horizontal"
  15. android:textSize="40px" />
  16. </LinearLayout>

注意:在布局里面我们可以完全用ui给的px尺寸来布局,这样生成的图片就和效果图几乎完全一样了。

最后来看下调用:

  1. public void createShareImage(View view) {
  2. ShareView shareView = new ShareView(MainActivity.this);
  3. shareView.setInfo("自定义文本");
  4. final Bitmap image = shareView.createImage();
  5. final String path = saveImage(image);
  6. Log.e("xxx", path);
  7. if (image != null && !image.isRecycled()) {
  8. image.recycle();
  9. }
  10. }
  11. /**
  12. * 保存bitmap到本地
  13. *
  14. * @param bitmap
  15. * @return
  16. */
  17. private String saveImage(Bitmap bitmap) {
  18. File path = getCacheDir();
  19. String fileName = "shareImage.png";
  20. File file = new File(path, fileName);
  21. if (file.exists()) {
  22. file.delete();
  23. }
  24. FileOutputStream fos = null;
  25. try {
  26. fos = new FileOutputStream(file);
  27. bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
  28. fos.flush();
  29. fos.close();
  30. } catch (FileNotFoundException e) {
  31. e.printStackTrace();
  32. } catch (IOException e) {
  33. e.printStackTrace();
  34. }
  35. return file.getAbsolutePath();
  36. }

最后运行完会在本地保存一个png图片

可以在日志中看到打印出来最终的图片地址(不同手机可能会不一样):/data/data/com.vice.viewshotproject/cache/shareImage.png,用adb命令把它拷贝到电脑。

  1. //root权限
  2. adb root
  3. //拷贝到桌面
  4. adb pull /data/data/com.vice.viewshotproject/cache/shareImage.png D:/Desktop/

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

闽ICP备14008679号