package com.project.sketchpad.view;
import java.util.ArrayList;
import com.project.sketchpad.Activity.SketchpadMainActivity;
import com.project.sketchpad.Contral.BitmapCtl;
import com.project.sketchpad.Contral.BitmapUtil;
import com.project.sketchpad.Contral.Circlectl;
import com.project.sketchpad.Contral.EraserCtl;
import com.project.sketchpad.Contral.LineCtl;
import com.project.sketchpad.Contral.OvaluCtl;
import com.project.sketchpad.Contral.PenuCtl;
import com.project.sketchpad.Contral.PlygonCtl;
import com.project.sketchpad.Contral.RectuCtl;
import com.project.sketchpad.Contral.Spraygun;
import com.project.sketchpad.data.CommonDef;
import com.project.sketchpad.interfaces.ISketchpadDraw;
import com.project.sketchpad.interfaces.IUndoRedoCommand;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
/**function:实现图形的绘制与显示
* @author :xiangminda;zhaoshuming;wangjian;zhoutianliang;shihongyan;
*Date:2011/7/18-27
*/
public class SketchpadView extends View implements IUndoRedoCommand{
//设置画笔常量
public static final int STROKE_PEN = 12; //画笔1
public static final int STROKE_ERASER = 2; //橡皮擦2
public static final int STROKE_PLYGON = 10; //多边形3
public static final int STROKE_RECT = 9; //矩形 4
public static final int STROKE_CIRCLE = 8; //圆 5
public static final int STROKE_OVAL = 7; //椭圆 6
public static final int STROKE_LINE = 6; //直线7
public static final int STROKE_SPRAYGUN=5; //喷枪8
public static final int STROKE_PAINTPOT=4; //油漆桶9
public static int flag =0; //油漆桶参数
public static final int UNDO_SIZE = 20; //撤销栈的大小
public static final int BITMAP_WIDTH = 650; //画布高
public static final int BITMAP_HEIGHT = 400; //画布宽
private int m_strokeType = STROKE_PEN; //画笔风格
private static int m_strokeColor = Color.RED; //画笔颜色
private static int m_penSize = CommonDef.SMALL_PEN_WIDTH; //画笔大小
private static int m_eraserSize = CommonDef.LARGE_ERASER_WIDTH; //橡皮擦大小
//实例新画布
private boolean m_isEnableDraw = true; //标记是否可以画
private boolean m_isDirty = false; //标记
private boolean m_isTouchUp = false; //标记是否鼠标弹起
private boolean m_isSetForeBmp = false; //标记是否设置了前bitmap
private int m_bkColor = Color.WHITE; //背景色
private int m_canvasWidth = 100; //画布宽
private int m_canvasHeight = 100; //画布高
private boolean m_canClear = true; //标记是否可清除
private Bitmap m_foreBitmap = null; //用于显示的bitmap
private Bitmap m_tempForeBitmap = null; //用于缓冲的bitmap
private Bitmap m_bkBitmap = null; //用于背后画的bitmap
private Canvas m_canvas; //画布
private Paint m_bitmapPaint = null; //画笔
private SketchPadUndoStack m_undoStack = null;//栈存放执行的操作
private ISketchpadDraw m_curTool = null; //记录操作的对象画笔类
int antiontemp = 0;//获取鼠标点击画布的event
boolean myLoop = false;// 喷枪结束标识符
///////////////// paint and Bk//////////////////////////////
//画布参数设计
public boolean isDirty(){
return m_isDirty; //
}
public void setDrawStrokeEnable(boolean isEnable){
m_isEnableDraw = isEnable; //确定是否可绘图
}
public void setBkColor(int color){ //设置背景颜色
if (m_bkColor != color){
m_bkColor = color;
invalidate();
}
}
public static void setStrokeSize(int size, int type){ //设置画笔的大小和橡皮擦大小
switch(type){
case STROKE_PEN:
m_penSize = size;
break;
case STROKE_ERASER:
m_eraserSize = size;
break;
}
}
public static void setStrokeColor(int color){ //设置画笔颜色
m_strokeColor = color;
}
public static int getStrokeSize(){ //得到画笔的大小
return m_penSize;
}
public static int getEraser(){ //得到橡皮擦的大小
return m_eraserSize;
}
public static int getStrokeColor(){ //得到画笔的大小
return m_strokeColor;
}
////////////////////////////////////////////////////////////
public void clearAllStrokes(){ //清空设置
if (m_canClear){
// 清空撤销栈
m_undoStack.clearAll();
// 设置当前的bitmap对象为空
if (null != m_tempForeBitmap){
m_tempForeBitmap.recycle();
m_tempForeBitmap = null;
}
// Create a new fore bitmap and set to canvas.
createStrokeBitmap(m_canvasWidth, m_canvasHeight);
invalidate();
m_isDirty = true;
m_canClear = false;
}
}
///////////////////////bitmap/////////////////////
/*保存时对当前绘图板的图片进行快照*/
public Bitmap getCanvasSnapshot(){
setDrawingCacheEnabled(true);
buildDrawingCache(true);
Bitmap bmp = getDrawingCache(true);
if (null == bmp){
android.util.Log.d("leehong2", "getCanvasSnapshot getDrawingCache == null");
}
return BitmapUtil.duplicateBitmap(bmp);
}
/*打开图像文件时,设置当前视图为foreBitmap*/
public void setForeBitmap(Bitmap foreBitmap){
if (foreBitmap != m_foreBitmap && null != foreBitmap){
// Recycle the bitmap.
if (null != m_foreBitmap){
m_foreBitmap.recycle();
}
// Here create a new fore bitmap to avoid crashing when set bitmap to canvas.
m_foreBitmap = BitmapUtil.duplicateBitmap(foreBitmap);
if (null != m_foreBitmap && null != m_canvas){
m_canvas.setBitmap(m_foreBitmap);
}
invalidate();
}
}
public Bitmap getForeBitmap(){
return m_bkBitmap;
}
public void setBkBitmap(Bitmap bmp){ //设置背景bitmap
if (m_bkBitmap != bmp){
m_bkBitmap = bmp;
invalidate();
}
}
public Bitmap getBkBitmap(){
return m_bkBitmap;
}
protected void createStrokeBitmap(int w, int h){
m_canvasWidth = w;
m_canvasHeight = h;
Bitmap bitmap = Bitmap.createBitmap(m_canvasWidth, m_canvasHeight, Bitmap.Config.ARGB_8888);
if (null != bitmap){
m_foreBitmap = bitmap;
// Set the fore bitmap to m_canvas to be as canvas of strokes.
m_canvas.setBitmap(m_foreBitmap);
}
}
protected void setTempForeBitmap(Bitmap tempForeBitmap){
if (null != tempForeBitmap){
if (null != m_foreBitmap){
m_foreBitmap.recycle();
}
m_foreBitmap = BitmapCtl.duplicateBitmap(tempForeBitmap);
if (null != m_foreBitmap && null != m_canvas) {
m_canvas.setBitmap(m_foreBitmap);
invalidate();
}
}
}
protected void setCanvasSize(int width, int height)
{//设置画布大小
if (width > 0 && height > 0){
if (m_canvasWidth != width || m_canvasHeight != height){
m_canvasWidth = width;
m_canvasHeight = height;
createStrokeBitmap(m_canvasWidth, m_canvasHeight);
}
}
}
//初始化数据 调用
protected void initialize(){
m_canvas = new Canvas();//实例画布用于整个绘图操作
m_bitmapPaint = new Paint(Paint.ANTI_ALIAS_FLAG); //实例化画笔用于bitmap设置画布canvas
m_undoStack = new SketchPadUndoStack(this, UNDO_SIZE);//实例
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
小画板 Android java (156个子文件)
resources.ap_ 1.07MB
Sketchpad.apk 1.1MB
proguard.cfg 1KB
SketchpadView.class 12KB
SketchpadMainActivity.class 7KB
BitmapCtl.class 7KB
PlygonCtl.class 4KB
BitmapUtil.class 4KB
SketchpadView$SketchPadUndoStack.class 3KB
EraserCtl.class 3KB
Spraygun.class 3KB
SaveGridViewActivity$1.class 3KB
PenuCtl.class 3KB
Circlectl.class 3KB
SaveGridViewActivity.class 2KB
R$drawable.class 2KB
OvaluCtl.class 2KB
RectuCtl.class 2KB
LineCtl.class 2KB
SaveGridViewActivity$GridImageAdapter.class 2KB
OpenGridViewActivity$GridImageAdapter.class 2KB
OpenGridViewActivity$1.class 2KB
FileOper.class 2KB
GridImageAdapter.class 2KB
OpenGridViewActivity.class 2KB
GridViewColorActivity.class 2KB
GridViewColorActivity$1.class 2KB
SketchpadMainActivity$1.class 2KB
SketchpadView$1.class 1KB
R$id.class 1KB
vertexStack.class 1KB
vertexDefine.class 911B
R.class 675B
R$string.class 655B
CommonDef.class 561B
R$layout.class 532B
R$style.class 496B
R$attr.class 376B
ISketchpadDraw.class 322B
IUndoRedoCommand.class 288B
.classpath 280B
classes.dex 47KB
bg1.gif 859B
SketchpadView.java 20KB
SketchpadMainActivity.java 8KB
BitmapCtl.java 7KB
R.java 7KB
SaveGridViewActivity.java 4KB
PlygonCtl.java 4KB
BitmapUtil.java 3KB
OpenGridViewActivity.java 3KB
GridViewColorActivity.java 3KB
Spraygun.java 3KB
EraserCtl.java 2KB
PenuCtl.java 2KB
Circlectl.java 2KB
RectuCtl.java 2KB
LineCtl.java 2KB
OvaluCtl.java 2KB
GridImageAdapter.java 2KB
FileOper.java 2KB
vertexStack.java 1KB
vertexDefine.java 504B
CommonDef.java 424B
ISketchpadDraw.java 391B
IUndoRedoCommand.java 278B
bg.jpg 160KB
color.jpg 24KB
yqt.jpg 24KB
redo.jpg 24KB
qx.jpg 24KB
save.jpg 23KB
gy.jpg 23KB
undo.jpg 23KB
pq.jpg 23KB
eraser.jpg 23KB
yqty.jpg 23KB
bs.jpg 23KB
pen.jpg 23KB
open.jpg 23KB
redoy.jpg 23KB
savey.jpg 22KB
undoy.jpg 22KB
gyy.jpg 22KB
dbx.jpg 22KB
cx.jpg 22KB
openy.jpg 22KB
erasery.jpg 22KB
pqy.jpg 22KB
color.jpg 22KB
peny.jpg 22KB
bsy.jpg 22KB
circle.jpg 22KB
line.jpg 22KB
ty.jpg 22KB
new1.jpg 22KB
cube.jpg 22KB
dbxy.jpg 21KB
cxy.jpg 21KB
colory.jpg 21KB
共 156 条
- 1
- 2
sada09
- 粉丝: 42
- 资源: 21
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页