Android 之小画板

来源:互联网 发布:matlab软件下载lvsexz 编辑:程序博客网 时间:2024/04/28 05:00
   继android计算器后的进击版  android的流行也让我们这种android的日志有了展现的价值  技术的天堂有你也有我  在这个经济利益的社会  希望我的飞蛾扑火可以让你感到一丝的温暖  让你对未来充满希望       不管未来的岁月如何变化  我只是想保持现有渴望汲取知识的状态  即使踽踽独行  我也要坚持的走下去  即使在无人注目的暗夜中  我也希望自己能够动情的燃烧着  为答谢那一段无怨无悔的岁月 /Painter3/src/com/wupic/painter/Circle.javaimport android.graphics.Canvas;public class Circle extends Shape {public Circle(float x, float y, int color, float paintWidth) {super(x, y, color, paintWidth);// TODO Auto-generated constructor stub}@Overridepublic void draw(Canvas canvas) {// TODO Auto-generated method stub//canvas.drawCircle(mRectangle.left,mRectangle.top, Math.min(Math.abs(mRectangle.bottom-mRectangle.top), Math.abs(mRectangle.right-mRectangle.left)), mPaint);/*mRound.right = x;mRound.bottom = y;*/if (mRectangle.width() > mRectangle.height()) {mRectangle.right = mRectangle.left + mRectangle.height();canvas.drawOval(mRectangle, mPaint);}if (mRectangle.width() <= mRectangle.height()) {mRectangle.bottom = mRectangle.top + mRectangle.width();canvas.drawOval(mRectangle, mPaint);}}}/Painter3/src/com/wupic/painter/ColorPicker.java(这个类网上找的)import android.app.Dialog;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.LinearGradient;import android.graphics.Paint;import android.graphics.RectF;import android.graphics.Shader;import android.graphics.SweepGradient;import android.os.Bundle;import android.util.Log;import android.view.MotionEvent;import android.view.View;import android.view.WindowManager;public class ColorPicker extends Dialog {        private final boolean debug = true;        private final String TAG = "ColorPicker";                Context context;        private String title;//标题        private int mInitialColor;//初始颜色    private OnColorChangedListener mListener;        /**     * 初始颜色黑色     * @param context     * @param title 对话框标题     * @param listener 回调     */    public ColorPicker(Context context, String title,                     OnColorChangedListener listener) {            this(context, Color.BLACK, title, listener);    }        /**     *      * @param context     * @param initialColor 初始颜色     * @param title 标题     * @param listener 回调     */    public ColorPicker(Context context, int initialColor,                     String title, OnColorChangedListener listener) {        super(context);        this.context = context;        mListener = listener;        mInitialColor = initialColor;        this.title = title;    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        WindowManager manager = getWindow().getWindowManager();                int height = (int) (manager.getDefaultDisplay().getHeight() * 0.9f);                int width = (int) (manager.getDefaultDisplay().getWidth() * 0.7f);                ColorPickerView myView = new ColorPickerView(context, height, width);        setContentView(myView);        setTitle(title);    }        private class ColorPickerView extends View {            private Paint mPaint;//渐变色环画笔            private Paint mCenterPaint;//中间圆画笔            private Paint mLinePaint;//分隔线画笔            private Paint mRectPaint;//渐变方块画笔                        private Shader rectShader;//渐变方块渐变图像            private float rectLeft;//渐变方块左x坐标            private float rectTop;//渐变方块右x坐标            private float rectRight;//渐变方块上y坐标            private float rectBottom;//渐变方块下y坐标                    private final int[] mCircleColors;//渐变色环颜色            private final int[] mRectColors;//渐变方块颜色                        private int mHeight;//View高            private int mWidth;//View宽            private float r;//色环半径(paint中部)            private float centerRadius;//中心圆半径                        private boolean downInCircle = true;//按在渐变环上            private boolean downInRect;//按在渐变方块上            private boolean highlightCenter;//高亮            private boolean highlightCenterLittle;//微亮                            public ColorPickerView(Context context, int height, int width) {                        super(context);                        this.mHeight = height - 36;                        this.mWidth = width;                        setMinimumHeight(height - 36);                        setMinimumWidth(width);                                                //渐变色环参数                    mCircleColors = new int[] {0xFFFF0000, 0xFFFF00FF, 0xFF0000FF,                                     0xFF00FFFF, 0xFF00FF00,0xFFFFFF00, 0xFFFF0000};                    Shader s = new SweepGradient(0, 0, mCircleColors, null);            mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);            mPaint.setShader(s);            mPaint.setStyle(Paint.Style.STROKE);            mPaint.setStrokeWidth(50);            r = width / 2 * 0.7f - mPaint.getStrokeWidth() * 0.1f;                        //中心圆参数            mCenterPaint = new Paint(Paint.ANTI_ALIAS_FLAG);            mCenterPaint.setColor(mInitialColor);            mCenterPaint.setStrokeWidth(5);            centerRadius = (r - mPaint.getStrokeWidth() / 2 ) * 0.7f;                        //边框参数            mLinePaint = new Paint(Paint.ANTI_ALIAS_FLAG);            mLinePaint.setColor(Color.parseColor("#72A1D1"));            mLinePaint.setStrokeWidth(4);                        //黑白渐变参数            mRectColors = new int[]{0xFF000000, mCenterPaint.getColor(), 0xFFFFFFFF};            mRectPaint = new Paint(Paint.ANTI_ALIAS_FLAG);            mRectPaint.setStrokeWidth(5);            rectLeft = -r - mPaint.getStrokeWidth() * 0.5f;            rectTop = r + mPaint.getStrokeWidth() * 0.5f +                             mLinePaint.getStrokeMiter() * 0.5f + 15;            rectRight = r + mPaint.getStrokeWidth() * 0.5f;            rectBottom = rectTop + 50;                }                @Override                protected void onDraw(Canvas canvas) {                        //移动中心            canvas.translate(mWidth / 2, mHeight / 2 - 50);            //画中心圆            canvas.drawCircle(0, 0, centerRadius,  mCenterPaint);            //是否显示中心圆外的小圆环            if (highlightCenter || highlightCenterLittle) {                int c = mCenterPaint.getColor();                mCenterPaint.setStyle(Paint.Style.STROKE);                if(highlightCenter) {                        mCenterPaint.setAlpha(0xFF);                }else if(highlightCenterLittle) {                        mCenterPaint.setAlpha(0x90);                }                canvas.drawCircle(0, 0,                                 centerRadius + mCenterPaint.getStrokeWidth(),  mCenterPaint);                                mCenterPaint.setStyle(Paint.Style.FILL);                mCenterPaint.setColor(c);            }            //画色环            canvas.drawOval(new RectF(-r, -r, r, r), mPaint);            //画黑白渐变块            if(downInCircle) {                    mRectColors[1] = mCenterPaint.getColor();            }            rectShader = new LinearGradient(rectLeft, 0, rectRight, 0, mRectColors, null, Shader.TileMode.MIRROR);            mRectPaint.setShader(rectShader);            canvas.drawRect(rectLeft, rectTop, rectRight, rectBottom, mRectPaint);            float offset = mLinePaint.getStrokeWidth() / 2;            canvas.drawLine(rectLeft - offset, rectTop - offset * 2,                             rectLeft - offset, rectBottom + offset * 2, mLinePaint);//左            canvas.drawLine(rectLeft - offset * 2, rectTop - offset,                             rectRight + offset * 2, rectTop - offset, mLinePaint);//上            canvas.drawLine(rectRight + offset, rectTop - offset * 2,                             rectRight + offset, rectBottom + offset * 2, mLinePaint);//右            canvas.drawLine(rectLeft - offset * 2, rectBottom + offset,                             rectRight + offset * 2, rectBottom + offset, mLinePaint);//下                        super.onDraw(canvas);                }                                @Override                public boolean onTouchEvent(MotionEvent event) {                        float x = event.getX() - mWidth / 2;            float y = event.getY() - mHeight / 2 + 50;            boolean inCircle = inColorCircle(x, y,                             r + mPaint.getStrokeWidth() / 2, r - mPaint.getStrokeWidth() / 2);            boolean inCenter = inCenter(x, y, centerRadius);            boolean inRect = inRect(x, y);                        switch (event.getAction()) {                case MotionEvent.ACTION_DOWN:                        downInCircle = inCircle;                        downInRect = inRect;                        highlightCenter = inCenter;                case MotionEvent.ACTION_MOVE:                        if(downInCircle && inCircle) {//down按在渐变色环内, 且move也在渐变色环内                                float angle = (float) Math.atan2(y, x);                        float unit = (float) (angle / (2 * Math.PI));                        if (unit < 0) {                            unit += 1;                        }                                       mCenterPaint.setColor(interpCircleColor(mCircleColors, unit));                                       if(debug) Log.v(TAG, "色环内, 坐标: " + x + "," + y);                        }else if(downInRect && inRect) {//down在渐变方块内, 且move也在渐变方块内                                mCenterPaint.setColor(interpRectColor(mRectColors, x));                        }                        if(debug) Log.v(TAG, "[MOVE] 高亮: " + highlightCenter + "微亮: " + highlightCenterLittle + " 中心: " + inCenter);                        if((highlightCenter && inCenter) || (highlightCenterLittle && inCenter)) {//点击中心圆, 当前移动在中心圆                                highlightCenter = true;                                highlightCenterLittle = false;                        } else if(highlightCenter || highlightCenterLittle) {//点击在中心圆, 当前移出中心圆                                highlightCenter = false;                                highlightCenterLittle = true;                        } else {                                highlightCenter = false;                                highlightCenterLittle = false;                        }                           invalidate();                        break;                case MotionEvent.ACTION_UP:                        if(highlightCenter && inCenter) {//点击在中心圆, 且当前启动在中心圆                                if(mListener != null) {                                        mListener.colorChanged(mCenterPaint.getColor());                                    ColorPicker.this.dismiss();                                }                        }                        if(downInCircle) {                                downInCircle = false;                        }                        if(downInRect) {                                downInRect = false;                        }                        if(highlightCenter) {                                highlightCenter = false;                        }                        if(highlightCenterLittle) {                                highlightCenterLittle = false;                        }                        invalidate();                    break;            }            return true;                }                @Override                protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {                        super.onMeasure(mWidth, mHeight);                }                /**                 * 坐标是否在色环上                 * @param x 坐标                 * @param y 坐标                 * @param outRadius 色环外半径                 * @param inRadius 色环内半径                 * @return                 */                private boolean inColorCircle(float x, float y, float outRadius, float inRadius) {                        double outCircle = Math.PI * outRadius * outRadius;                        double inCircle = Math.PI * inRadius * inRadius;                        double fingerCircle = Math.PI * (x * x + y * y);                        if(fingerCircle < outCircle && fingerCircle > inCircle) {                                return true;                        }else {                                return false;                        }                }                                /**                 * 坐标是否在中心圆上                 * @param x 坐标                 * @param y 坐标                 * @param centerRadius 圆半径                 * @return                 */                private boolean inCenter(float x, float y, float centerRadius) {                        double centerCircle = Math.PI * centerRadius * centerRadius;                        double fingerCircle = Math.PI * (x * x + y * y);                        if(fingerCircle < centerCircle) {                                return true;                        }else {                                return false;                        }                }                                /**                 * 坐标是否在渐变色中                 * @param x                 * @param y                 * @return                 */                private boolean inRect(float x, float y) {                        if( x <= rectRight && x >=rectLeft && y <= rectBottom && y >=rectTop) {                                return true;                        } else {                                return false;                        }                }                                /**                 * 获取圆环上颜色                 * @param colors                 * @param unit                 * @return                 */            private int interpCircleColor(int colors[], float unit) {            if (unit <= 0) {                return colors[0];            }            if (unit >= 1) {                return colors[colors.length - 1];            }                        float p = unit * (colors.length - 1);            int i = (int)p;            p -= i;            // now p is just the fractional part [0...1) and i is the index            int c0 = colors[i];            int c1 = colors[i+1];            int a = ave(Color.alpha(c0), Color.alpha(c1), p);            int r = ave(Color.red(c0), Color.red(c1), p);            int g = ave(Color.green(c0), Color.green(c1), p);            int b = ave(Color.blue(c0), Color.blue(c1), p);                        return Color.argb(a, r, g, b);        }                                /**                 * 获取渐变块上颜色                 * @param colors                 * @param x                 * @return                 */                private int interpRectColor(int colors[], float x) {                        int a, r, g, b, c0, c1;                float p;                if (x < 0) {                        c0 = colors[0];                         c1 = colors[1];                        p = (x + rectRight) / rectRight;                } else {                        c0 = colors[1];                        c1 = colors[2];                        p = x / rectRight;                }                a = ave(Color.alpha(c0), Color.alpha(c1), p);                r = ave(Color.red(c0), Color.red(c1), p);                g = ave(Color.green(c0), Color.green(c1), p);                b = ave(Color.blue(c0), Color.blue(c1), p);                return Color.argb(a, r, g, b);                }                                private int ave(int s, int d, float p) {            return s + Math.round(p * (d - s));        }    }        /**     * 回调接口     * @author <a href="clarkamx@gmail.com">LynK</a>     *      * Create on 2012-1-6 上午8:21:05     *     */    public interface OnColorChangedListener {            /**             * 回调函数             * @param color 选中的颜色             */        void colorChanged(int color);    }        public String getTitle() {                return title;        }        public void setTitle(String title) {                this.title = title;        }        public int getmInitialColor() {                return mInitialColor;        }        public void setmInitialColor(int mInitialColor) {                this.mInitialColor = mInitialColor;        }        public OnColorChangedListener getmListener() {                return mListener;        }        public void setmListener(OnColorChangedListener mListener) {                this.mListener = mListener;        }}/Painter3/src/com/wupic/painter/Curve.javaimport java.util.ArrayList;import java.util.List;import android.graphics.Canvas;import android.graphics.EmbossMaskFilter;import android.graphics.Paint;import android.graphics.Path;import android.graphics.PointF;import android.graphics.RectF;public class Curve extends Shape {private List<PointF> mPoints;/** 绘制路径 */protected Path mPath;/** * @param x 起点横坐标 * @param y 起点纵坐标 * @param color 笔刷颜色 * @param paintWidth 笔刷粗细 */public Curve(float x, float y, int color, float paintWidth) {super(x, y, color, paintWidth);mPoints = new ArrayList<PointF>();PointF point = new PointF(x, y);mPoints.add(point);mPath = new Path();}@Overridepublic void setEndPoint(float x, float y) {super.setEndPoint(x, y);PointF point = new PointF(x, y);mPoints.add(point);}@Overridepublic void draw(Canvas canvas) {mPath.rewind();mPath.moveTo(mPoints.get(0).x, mPoints.get(0).y);for (PointF point : mPoints) {mPath.lineTo(point.x, point.y);}canvas.drawPath(mPath, mPaint);}}/Painter3/src/com/wupic/painter/Ellipse.javaimport android.graphics.Canvas;public class Ellipse extends Shape {public Ellipse(float x, float y, int color, float paintWidth) {super(x, y, color, paintWidth);// TODO Auto-generated constructor stub}@Overridepublic void draw(Canvas canvas) {// TODO Auto-generated method stubcanvas.drawOval(mRectangle, mPaint);}}/Painter3/src/com/wupic/painter/Erease.javaimport android.graphics.PorterDuff;import android.graphics.PorterDuffXfermode;public class Erease extends Curve {public Erease(float x, float y, int color, float paintWidth) {super(x, y, color, paintWidth);// TODO Auto-generated constructor stubmPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));}}/Painter3/src/com/wupic/painter/PaintView.javaimport java.util.Iterator;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;import android.util.AttributeSet;import android.view.View;public class PaintView extends View {/** * @param context */Bitmap mBitmap;Canvas mCanvas;public PaintView(Context context) {super(context);}/** * @param context * @param attrs */public PaintView(Context context, AttributeSet attrs) {super(context, attrs);}/** * @param context * @param attrs * @param defStyle */public PaintView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);if(mBitmap==null){mBitmap=Bitmap.createBitmap(getMeasuredWidth(),getMeasuredHeight(),Bitmap.Config.ARGB_8888);mCanvas=new Canvas(mBitmap);}mCanvas.drawColor(Color.WHITE);Iterator<Shape> iterator = ShapeManager.getInstance().getShapesIterator();while (iterator.hasNext()) {Shape shape = iterator.next();shape.draw(mCanvas);}canvas.drawBitmap(mBitmap, 0, 0,null);}}/Painter3/src/com/wupic/painter/Rectangle.javaimport android.graphics.Canvas;public class Rectangle extends Shape {/** * @param x * @param y * @param color * @param paintWidth */public Rectangle(float x, float y, int color, float paintWidth) {super(x, y, color, paintWidth);}/* (non-Javadoc) * @see com.wupic.painter.Shape#draw(android.graphics.Canvas) */@Overridepublic void draw(Canvas canvas) {canvas.drawRect(mRectangle, mPaint);}}/Painter3/src/com/wupic/painter/Shape.javaimport android.graphics.Canvas;import android.graphics.CornerPathEffect;import android.graphics.Paint;import android.graphics.Paint.Style;import android.graphics.RectF;public abstract class Shape {/** 图形的范围 */protected RectF mRectangle;/** 笔刷 */protected Paint mPaint;/** * @param x 起点横坐标 * @param y 起点纵坐标 * @param color 笔刷颜色 * @param paintWidth 笔刷粗细 */public Shape(float x, float y, int color, float paintWidth) {/*mRectangle = new RectF(x, y, x, y);mPaint = new Paint();mPaint.setColor(color);mPaint.setStrokeWidth(paintWidth);mPaint.setStyle(Style.STROKE);mPaint.setAntiAlias(true);mPaint.setPathEffect(new CornerPathEffect(10));mPaint.getMaskFilter();*/mRectangle = new RectF(x, y, x, y);mPaint = new Paint();mPaint.setColor(color);mPaint.setStrokeWidth(paintWidth);mPaint.setStyle(Style.STROKE);}/** * 设置终点 * @param x 终点横坐标 * @param y 终点纵坐标 */public void setEndPoint(float x, float y) {mRectangle.right = x;mRectangle.bottom = y;}/** * 绘制 * @param canvas 画布 */public abstract void draw(Canvas canvas);}/Painter3/src/com/wupic/painter/ShapeManager.javaimport java.util.ArrayList;import java.util.Iterator;import java.util.List;/** * 图形管理器 */public class ShapeManager {private List<Shape> mShapes;private static ShapeManager instance;private ShapeManager(){mShapes = new ArrayList<Shape>();};/** * 获得实例方法 * @return */public static ShapeManager getInstance() {if (instance == null) {instance = new ShapeManager();}return instance;}/** * 获得图形list的迭代器 * @return */public Iterator<Shape> getShapesIterator() {return mShapes.iterator();}/** * 增加一个图形 * @param shape */public void addShape(Shape shape) {mShapes.add(shape);}/** * 清空所有图形 */public void clearShapes() {mShapes.clear();}}/Painter3/src/com/wupic/painter/Teragonal.javaimport android.graphics.Canvas;public class Teragonal extends Shape {public Teragonal(float x, float y, int color, float paintWidth) {super(x, y, color, paintWidth);// TODO Auto-generated constructor stub}@Overridepublic void draw(Canvas canvas) {// TODO Auto-generated method stub/*if(Math.abs(mRectangle.bottom-mRectangle.top)!=Math.abs(mRectangle.right-mRectangle.left)){int min=(int) Math.min(Math.abs(mRectangle.bottom-mRectangle.top), Math.abs(mRectangle.right-mRectangle.left));mRectangle.bottom=mRectangle.top+min;mRectangle.right=mRectangle.left+min;canvas.drawRect(mRectangle, mPaint);}*/if (mRectangle.width() > mRectangle.height()) {mRectangle.right = mRectangle.left + mRectangle.height();canvas.drawRect(mRectangle, mPaint);}if (mRectangle.width() <= mRectangle.height()) {mRectangle.bottom = mRectangle.top + mRectangle.width();canvas.drawRect(mRectangle, mPaint);}}}/Painter3/src/com/wupic/painter/MainActivity.javaimport android.app.Activity;import android.content.Context;import android.graphics.BlurMaskFilter;import android.graphics.Color;import android.graphics.EmbossMaskFilter;import android.os.Bundle;import android.view.MotionEvent;import android.view.View;import android.view.View.OnClickListener;import android.view.View.OnTouchListener;import android.widget.ArrayAdapter;import android.widget.Button;import android.widget.Spinner;public class MainActivity extends Activity {private Spinner mShapes;private Spinner mColors;private Spinner mWidths;private Button mClearButton;private PaintView mCanvas;private Button btnColor;Context context ;/** 当前正在绘制的图形 */private Shape mCurrentShape;private ColorPicker dialog;    @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);context = this;initView();setupSpinners();setupListeners();}/** * 初始化界面元素 */private void initView() {mShapes = (Spinner) findViewById(R.id.sp_shape);mColors = (Spinner) findViewById(R.id.sp_color);mWidths = (Spinner) findViewById(R.id.sp_width);mClearButton = (Button) findViewById(R.id.btn_clear);mCanvas = (PaintView) findViewById(R.id.pv_canvas);btnColor=(Button)findViewById(R.id.btn_color);mCanvas.setBackgroundColor(Color.WHITE);}/** * 设置下拉框数据 */private void setupSpinners() {ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.shapes, android.R.layout.simple_spinner_item);adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);mShapes.setAdapter(adapter);adapter = ArrayAdapter.createFromResource(this, R.array.colors, android.R.layout.simple_spinner_item);adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);mColors.setAdapter(adapter);adapter = ArrayAdapter.createFromResource(this, R.array.widths, android.R.layout.simple_spinner_item);adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);mWidths.setAdapter(adapter);}/** * 设置监听器 */private void setupListeners() {mClearButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {ShapeManager.getInstance().clearShapes();mCanvas.invalidate();}});btnColor.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {dialog = new ColorPicker(context, 0,                          getResources().getString(R.id.btn_color),                          new ColorPicker.OnColorChangedListener() {@Overridepublic void colorChanged(int color) {// TODO Auto-generated method stubbtnColor.setTextColor(color);}});dialog.show();}});mCanvas.setOnTouchListener(new OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:addShape(event.getX(), event.getY());break;case MotionEvent.ACTION_MOVE:mCurrentShape.setEndPoint(event.getX(), event.getY());mCanvas.invalidate();break;default:break;}return true;}});}/** * 增加一个图形 * @param x * @param y */private void addShape(float x, float y) {int color=btnColor.getCurrentTextColor();float paintWidth = 0;switch (mWidths.getSelectedItemPosition()) {case 0:paintWidth = 2f;break;case 1:paintWidth = 5f;break;case 2:paintWidth = 8f;break;default:paintWidth = 2f;break;}switch (mColors.getSelectedItemPosition()) {case 0:break;case 1:color = Color.RED;break;case 2:mCurrentShape.mPaint.setMaskFilter(new BlurMaskFilter(8,BlurMaskFilter.Blur.NORMAL));break;case 3:mCurrentShape.mPaint.setMaskFilter(new EmbossMaskFilter(new float[]{1,1,1},0.4f,6,3.5f));break;default:color = Color.BLACK;break;}switch (mShapes.getSelectedItemPosition()) {case 0:mCurrentShape = new Curve(x, y, color, paintWidth);break;case 1:mCurrentShape = new Rectangle(x, y, color, paintWidth);break;case 2:mCurrentShape=new Ellipse(x, y, color, paintWidth);break;case 3:mCurrentShape=new Teragonal(x, y, color, paintWidth);break;case 4:mCurrentShape=new Circle(x, y, color, paintWidth);break;case 5:mCurrentShape=new Erease(x, y, color, paintWidth);break;default:mCurrentShape = new Curve(x, y, color, paintWidth);break;}ShapeManager.getInstance().addShape(mCurrentShape);}}
程序被安装在虚拟机上
小画板运行效果
色板选择自己喜欢的颜色

0 0
原创粉丝点击