首页 > 代码库 > android项目 之 记事本(9) ----- 画板功能之橡皮擦、画笔大小和画笔颜色
android项目 之 记事本(9) ----- 画板功能之橡皮擦、画笔大小和画笔颜色
上节已实现了画板中的绘制,删除,恢复入清空的功能,还有橡皮擦,设置画笔大小和画笔颜色没有实现,这节就将这几个功能逐一实现。
先看效果图:
以上图中,第一个展示了设置画笔颜色的功能,第二个展示了设置画笔大小的颜色,而第三个则展示了橡皮擦的功能,细心的可以发现,这节将图标颜色设置为了蓝色,并且,增加了最左边的按钮(其实,就是在gridview中多增加了一个item)。
下面分别讨论,橡皮擦,设置画笔大小,设置画笔颜色的主要思想:
1. 橡皮擦功能:
基本原理:橡皮擦就是用和画布颜色一致颜色的画笔在屏幕触摸,简接实现橡皮擦的功能。
1)初始化画笔,并且设置画笔的颜色为白色(这里其实要设置为画布的颜色)。
2)设置画笔的大小为合适的大小。
3)用一个变量记住橡皮擦的颜色,用于在其他操作后重新使用橡皮擦。
2. 设置画笔大小的功能:
1)初始化画笔。
2)设置画笔的大小为所选择的大小。
3)用一个变量记住当前画笔的大小,用于在进行其他操作后还保持之前设置的画笔大小。
3. 设置画笔颜色的功能:
1)初始化画笔。
2)设置画笔的颜色为所选择的颜色。
3)用一个变量记住当前画笔的颜色,用于在进行其他操作后还保持之前设置的画笔颜色。
主要代码如下:
private Bitmap mBitmap; private int currentColor = Color.RED; private int currentSize = 5;
//设置画笔样式 public void setPaintStyle(){ mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setDither(true); mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeJoin(Paint.Join.ROUND); mPaint.setStrokeCap(Paint.Cap.ROUND); mPaint.setStrokeWidth(currentSize); mPaint.setColor(currentColor); }
//初始化画布 public void initCanvas(){ setPaintStyle(); mBitmapPaint = new Paint(Paint.DITHER_FLAG); //画布大小 mBitmap = Bitmap.createBitmap(bitmapWidth, bitmapHeight, Bitmap.Config.RGB_565); mCanvas = new Canvas(mBitmap); //所有mCanvas画的东西都被保存在了mBitmap中 mCanvas.drawColor(Color.WHITE); mPath = new Path(); mBitmapPaint = new Paint(Paint.DITHER_FLAG); }
设置画笔样式:
//设置画笔样式 public void selectPaintStyle(int which){ setPaintStyle(); //当选择的是橡皮擦时,设置颜色为白色 if(which == 1){ mPaint.setColor(Color.WHITE); mPaint.setStrokeWidth(20); currentColor = Color.WHITE; } }
设置画笔大小:
<strong abp="918"> </strong>//选择画笔大小 <strong abp="919"> public void selectPaintSize(int which){ setPaintStyle(); int size =Integer.parseInt(this.getResources().getStringArray(R.array.paintsize)[which]); currentSize = size; mPaint.setStrokeWidth(currentSize); }</strong>
设置画笔颜色:
//设置画笔颜色 <strong abp="924"> public void selectPaintColor(int which){ setPaintStyle(); currentColor = paintColor[which]; mPaint.setColor(currentColor); } </strong>
当然了,这些方法都是在自定义view,即PaintView中实现的,接下来就是通过单击底部按钮,调用自定义View的方法,实现相应的功能
//选择画笔样式 case 0: showMoreDialog(view); break; //画笔大小 case 1: showPaintSizeDialog(view); break; //画笔颜色 case 2: showPaintColorDialog(view); break;
//弹出画笔颜色选项对话框 public void showPaintColorDialog(View parent){ AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this,R.style.custom_dialog); alertDialogBuilder.setTitle("选择画笔颜色:"); alertDialogBuilder.setSingleChoiceItems(R.array.paintcolor, select_paint_color_index, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { select_paint_color_index = which; paintView.selectPaintColor(which); dialog.dismiss(); } }); alertDialogBuilder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); alertDialogBuilder.create().show(); } //弹出画笔大小选项对话框 public void showPaintSizeDialog(View parent){ AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this,R.style.custom_dialog); alertDialogBuilder.setTitle("选择画笔大小:"); alertDialogBuilder.setSingleChoiceItems(R.array.paintsize, select_paint_size_index, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { select_paint_size_index = which; paintView.selectPaintSize(which); dialog.dismiss(); } }); alertDialogBuilder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); alertDialogBuilder.create().show(); } //弹出选择画笔或橡皮擦的对话框 public void showMoreDialog(View parent){ AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this,R.style.custom_dialog); alertDialogBuilder.setTitle("选择画笔或橡皮擦:"); alertDialogBuilder.setSingleChoiceItems(R.array.paintstyle, select_paint_style_index, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { select_paint_style_index = which; paintView.selectPaintStyle(which); dialog.dismiss(); } }); alertDialogBuilder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); alertDialogBuilder.create().show(); }
至此,已实现了画板所有的功能。
其实,还有一个比较有趣的功能,就是为画笔设置一个铅笔的图标,主要原理,就是在自定义View中的ondraw方法中,将铅笔图片加载进去,并设置图片随着路径移动。
在自定义View中的ondraw方法中添加:
//移动时,显示画笔图标 if(this.isMoving && currentColor != Color.WHITE){ //设置画笔的图标 Bitmap pen = BitmapFactory.decodeResource(this.getResources(), R.drawable.pen); canvas.drawBitmap(pen, this.mX, this.mY - pen.getHeight(), new Paint(Paint.DITHER_FLAG)); }
android项目 之 记事本(9) ----- 画板功能之橡皮擦、画笔大小和画笔颜色