当前位置:操作系统 > 安卓/Android >>

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 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,