Android(安卓)如何将Canvas上绘制的内容保存成本地图片
16lz
2021-01-26
效果如下图所示
保存在sd卡上的文件为
手机上显示效果为:
1》》在Manifest文件中增加相应权限
例如我的Manifest文件代码如下:
<?xml version="1.0" encoding="utf-8"?>
2》》详细代码如下
package com.demo.picturetest;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.Bitmap.Config;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.os.Bundle;import android.os.Environment;import android.util.Log;import android.widget.ImageView;public class MainActivity extends Activity {private Bitmap mBitmap;// 画布private Canvas mCanvas;// 画笔--画图片private Paint mPicturePaint = new Paint();// 画笔--写字private Paint mTextPaint = new Paint();// 画笔--写运动数据private Paint mDataPaint = new Paint();private ImageView mImageView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);drawBitmap();init();// 展示mImageView.setImageBitmap(mBitmap);}private void init() {mImageView = (ImageView) findViewById(R.id.mImageView);}/** * 根据图片和文字生成图片 * */private void drawBitmap() {Bitmap bm_bg = BitmapFactory.decodeResource(getResources(),R.drawable.dashboard_bg);// 得到图片的宽、高int width_bg = bm_bg.getWidth();int height_bg = bm_bg.getHeight();// 创建一个你需要尺寸的BitmapmBitmap = Bitmap.createBitmap(width_bg, height_bg, Config.ARGB_8888);// 用这个Bitmap生成一个Canvas,然后canvas就会把内容绘制到上面这个bitmap中mCanvas = new Canvas(mBitmap);// 绘制背景图片mCanvas.drawBitmap(bm_bg, 0.0f, 0.0f, mPicturePaint);// 绘制图片Bitmap bm_head = BitmapFactory.decodeResource(getResources(),R.drawable.share_head_img);// 得到图片的宽、高int width_head = bm_head.getWidth();int height_head = bm_head.getHeight();// 绘制图片--保证其在水平方向居中mCanvas.drawBitmap(bm_head, (width_bg - width_head) / 2, 0.0f,mPicturePaint);// 绘制文字mTextPaint.setColor(Color.WHITE);// 白色画笔mTextPaint.setTextSize(80.0f);// 设置字体大小// 绘制文字mDataPaint.setColor(Color.RED);// 红色画笔mDataPaint.setTextSize(120.0f);// 设置字体大小String distanceTextString = "运动距离:";String distanceDataString = String.valueOf(888);String distanceScalString = "米";float distanceTextString_width = mTextPaint.measureText(distanceTextString, 0, distanceTextString.length());float distanceDataString_width = mDataPaint.measureText(distanceDataString, 0, distanceDataString.length());float distanceScalString_width = mTextPaint.measureText(distanceScalString, 0, distanceScalString.length());float x = (width_bg - distanceTextString_width- distanceDataString_width - distanceScalString_width) / 2;mCanvas.drawText(distanceTextString, x, height_head, mTextPaint);// 绘制文字mCanvas.drawText(distanceDataString, x + distanceTextString_width,height_head, mDataPaint);// 绘制文字mCanvas.drawText(distanceScalString, x + distanceTextString_width+ distanceDataString_width, height_head, mTextPaint);// 绘制文字// 保存绘图为本地图片mCanvas.save(Canvas.ALL_SAVE_FLAG);mCanvas.restore();File file = new File(Environment.getExternalStorageDirectory().getPath() + "/share_pic.png");// 保存到sdcard根目录下,文件名为share_pic.pngLog.i("CXC", Environment.getExternalStorageDirectory().getPath());FileOutputStream fos = null;try {fos = new FileOutputStream(file);mBitmap.compress(Bitmap.CompressFormat.PNG, 50, fos);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {fos.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
更多相关文章
- Android中Google地图折线层(Polyline)
- Android(安卓)Paint类方法说明
- Android(安卓)OpenGL ES学习笔记之绘制点
- android 绘制虚线效果
- 一个有趣的android加载动画
- Android中TextView文字镂空效果的实现
- android 点击字体,图片背景效果一起变换Demo
- 转载:谁说程序员不浪漫---Android爱心表白
- Android之GPU过度绘制与图形渲染优化——Hierarchyviewer时间不