Android 手绘 - 支持保存为图片
画了一个非常难看的机器人。。。
附上关键代码:
MainView.java
001
package com.tszy.views;
002
003
import java.io.File;
004
import java.io.FileNotFoundException;
005
import java.io.FileOutputStream;
006
import java.io.IOException;
007
008
import android.content.Context;
009
import android.graphics.Bitmap;
010
import android.graphics.Bitmap.CompressFormat;
011
import android.graphics.Bitmap.Config;
012
import android.graphics.Canvas;
013
import android.graphics.Color;
014
import android.graphics.Paint;
015
import android.graphics.Path;
016
import android.util.AttributeSet;
017
import android.view.MotionEvent;
018
import android.view.View;
019
020
public class MainView extends View {
021
private Paint paint;
022
private Canvas cacheCanvas;
023
private Bitmap cachebBitmap;
024
private Path path;
025
026
private int clr_bg, clr_fg;
027
028
029
public MainView(Context context, AttributeSet attrs) {
030
super(context, attrs);
031
032
clr_bg = Color.WHITE;
033
clr_fg = Color.CYAN;
034
035
paint = new Paint();
036
paint.setAntiAlias(true); // 抗锯齿
037
paint.setStrokeWidth(3); // 线条宽度
038
paint.setStyle(Paint.Style.STROKE); // 画轮廓
039
paint.setColor(clr_fg); // 颜色
040
041
path = new Path();
042
// 创建一张屏幕大小的位图,作为缓冲
043
cachebBitmap = Bitmap.createBitmap(480, 800, Config.ARGB_8888);
044
cacheCanvas = new Canvas(cachebBitmap);
045
cacheCanvas.drawColor(clr_bg);
046
}
047
048
public MainView(Context context) {
049
super(context);
050
}
051
052
@Override
053
protected void onDraw(Canvas canvas) {
054
canvas.drawColor(clr_bg);
055
056
// 绘制上一次的,否则不连贯
057
canvas.drawBitmap(cachebBitmap, 0, 0, null);
058
canvas.drawPath(path, paint);
059
}
060
061
/**
062
* 清空画布
063
*/
064
public void clear() {
065
path.reset();
066
cacheCanvas.drawColor(clr_bg);
067
invalidate();
068
}
069
070
/**
071
* 将画布的内容保存到文件
072
* @param filename
073
* @throws FileNotFoundException
074
*/
075
public void saveToFile(String filename) throws FileNotFoundException {
076
File f = new File(filename);
077
if(f.exists())
078
throw new RuntimeException("文件:" + filename + " 已存在!");
079
080
FileOutputStream fos = new FileOutputStream(new File(filename));
081
//将 bitmap 压缩成其他格式的图片数据
082
cachebBitmap.compress(CompressFormat.PNG, 50, fos);
083
try {
084
fos.close();
085
} catch (IOException e) {
086
// TODO Auto-generated catch block
087
e.printStackTrace();
088
}
089
}
090
091
private float cur_x, cur_y;
092
private boolean isMoving;
093
@Override
094
public boolean onTouchEvent(MotionEvent event) {
095
// TODO Auto-generated method stub
096
float x = event.getX();
097
float y = event.getY();
098
099
switch (event.getAction()) {
100
case MotionEvent.ACTION_DOWN : {
101
cur_x = x;
102
cur_y = y;
103
path.moveTo(cur_x, cur_y);
104
isMoving = true;
105
break;
106
}
107
108
case MotionEvent.ACTION_MOVE : {
109
if (!isMoving)
110
break;
111
112
// 二次曲线方式绘制
113
&
补充:移动开发 , Android ,