第一展示设置画笔颜色的功能,第二展示设置画笔大小的颜色,而第三则展示橡皮擦的功能,这节将图标颜色设置为了蓝色,并且,增加了最左边的按钮(其实,就是在gridview中多增加了一个item)。

下面分别讨论,橡皮擦,设置画笔大小,设置画笔颜色的主要思想:

1. 橡皮擦功能:

基本原理:橡皮擦就是用和画布颜色一致颜色的画笔在屏幕触摸,简接实现橡皮擦的功能。

1)初始化画笔,并且设置画笔的颜色为白色(这里其实要设置为画布的颜色)。

2)设置画笔的大小为合适的大小。

3)用一个变量记住橡皮擦的颜色,用于在其他操作后重新使用橡皮擦。

2. 设置画笔大小的功能:

1)初始化画笔。

2)设置画笔的大小为所选择的大小。

3)用一个变量记住当前画笔的大小,用于在进行其他操作后还保持之前设置的画笔大小。

3. 设置画笔颜色的功能:

1)初始化画笔。

2)设置画笔的颜色为所选择的颜色。

3)用一个变量记住当前画笔的颜色,用于在进行其他操作后还保持之前设置的画笔颜色。

主要代码如下:

privateBitmap mBitmap;private int currentColor =Color.RED;private int currentSize = 5;private int currentStyle = 1;

//设置画笔样式

public voidsetPaintStyle(){

mPaint= newPaint();

mPaint.setAntiAlias(true);

mPaint.setDither(true);

mPaint.setStyle(Paint.Style.STROKE);

mPaint.setStrokeJoin(Paint.Join.ROUND);

mPaint.setStrokeCap(Paint.Cap.ROUND);

mPaint.setStrokeWidth(currentSize);if(currentStyle == 1)

mPaint.setColor(currentColor);else{

mPaint.setColor(Color.WHITE);

}

}

//初始化画布

public voidinitCanvas(){

setPaintStyle();

mBitmapPaint= newPaint(Paint.DITHER_FLAG);//画布大小

mBitmap =Bitmap.createBitmap(bitmapWidth, bitmapHeight,

Bitmap.Config.RGB_565);

mCanvas= new Canvas(mBitmap); //所有mCanvas画的东西都被保存在了mBitmap中

mCanvas.drawColor(Color.WHITE);

mPath= newPath();

mBitmapPaint= newPaint(Paint.DITHER_FLAG);

}

设置画笔样式:

//设置画笔样式

public void selectPaintStyle(intwhich){if(which == 0){

currentStyle= 1;

setPaintStyle();

}//当选择的是橡皮擦时,设置颜色为白色

if(which == 1){

currentStyle= 2;

setPaintStyle();

mPaint.setStrokeWidth(20);

}

}

设置画笔大小:

//选择画笔大小

public void selectPaintSize(intwhich){int size =Integer.parseInt(this.getResources().getStringArray(R.array.paintsize)[which]);

currentSize=size;

setPaintStyle();

}

设置画笔颜色:

//设置画笔颜色

public void selectPaintColor(intwhich){

currentColor=paintColor[which];

setPaintStyle();

}

当然了,这些方法都是在自定义view,即PaintView中实现的,接下来就是通过单击底部按钮,调用自定义View的方法,实现相应的功能

//选择画笔样式

case 0:

showMoreDialog(view);break;//画笔大小

case 1:

showPaintSizeDialog(view);break;//画笔颜色

case 2:

showPaintColorDialog(view);break;

//弹出画笔颜色选项对话框

public voidshowPaintColorDialog(View parent){

AlertDialog.Builder alertDialogBuilder= new AlertDialog.Builder(this,R.style.custom_dialog);

alertDialogBuilder.setTitle("选择画笔颜色:");

alertDialogBuilder.setSingleChoiceItems(R.array.paintcolor, select_paint_color_index,newDialogInterface.OnClickListener() {

@Overridepublic void onClick(DialogInterface dialog, intwhich) {

select_paint_color_index=which;

paintView.selectPaintColor(which);

dialog.dismiss();

}

});

alertDialogBuilder.setNegativeButton("取消", newDialogInterface.OnClickListener() {

@Overridepublic void onClick(DialogInterface dialog, intwhich) {

dialog.dismiss();

}

});

alertDialogBuilder.create().show();

}//弹出画笔大小选项对话框

public voidshowPaintSizeDialog(View parent){

AlertDialog.Builder alertDialogBuilder= new AlertDialog.Builder(this,R.style.custom_dialog);

alertDialogBuilder.setTitle("选择画笔大小:");

alertDialogBuilder.setSingleChoiceItems(R.array.paintsize, select_paint_size_index,newDialogInterface.OnClickListener() {

@Overridepublic void onClick(DialogInterface dialog, intwhich) {

select_paint_size_index=which;

paintView.selectPaintSize(which);

dialog.dismiss();

}

});

alertDialogBuilder.setNegativeButton("取消", newDialogInterface.OnClickListener() {

@Overridepublic void onClick(DialogInterface dialog, intwhich) {

dialog.dismiss();

}

});

alertDialogBuilder.create().show();

}//弹出选择画笔或橡皮擦的对话框

public voidshowMoreDialog(View parent){

AlertDialog.Builder alertDialogBuilder= new AlertDialog.Builder(this,R.style.custom_dialog);

alertDialogBuilder.setTitle("选择画笔或橡皮擦:");

alertDialogBuilder.setSingleChoiceItems(R.array.paintstyle, select_paint_style_index,newDialogInterface.OnClickListener() {

@Overridepublic void onClick(DialogInterface dialog, intwhich) {

select_paint_style_index=which;

paintView.selectPaintStyle(which);

dialog.dismiss();

}

});

alertDialogBuilder.setNegativeButton("取消", newDialogInterface.OnClickListener() {

@Overridepublic void onClick(DialogInterface dialog, intwhich) {

dialog.dismiss();

}

});

alertDialogBuilder.create().show();

}

这里面用到arrays.xml,如下:

@string/track_line

@string/Eraser

5

10

15

20

25

30

RED

BLUE

BLACK

GREEN

YELLOW

CYAN

LTGRAY

至此,已实现了画板所有的功能。

其实,还有一个比较有趣的功能,就是为画笔设置一个铅笔的图标,主要原理,就是在自定义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(),newPaint(Paint.DITHER_FLAG));

}

原文:http://www.cnblogs.com/zhujiabin/p/4183014.html

android画笔大小,android之画板功能之橡皮擦 画笔大小和画笔颜色相关推荐

  1. android 背景 投影,Android ImageView投影

    在android studio中有build drawable,你可以使用它来将阴影应用到任何View.这类似于投影. android:background="@drawable/abc_m ...

  2. android画板需求分析,Android编程实现画板功能的方法总结【附源码下载】

    本文实例讲述了Android编程实现画板功能的方法.分享给大家供大家参考,具体如下: Android实现画板主要有2种方式,一种是用自定义View实现,另一种是通过Canvas类实现.当然自定义Vie ...

  3. Android如何实现画板功能?

    前言 Android实现画板主要有2种方式,一种是用自定义View实现,另一种是通过Canvas类实现.当然自定义View内部也是用的Canvas. 自定义View 创建一个自定义View(推荐Sur ...

  4. Android实现画板功能(一)

    前言 最近看到了一些Android手写相关的功能,比如说: 钉钉手写签名功能,输入法手写功能,笔记类App的手写记录功能等.最近在工作中也遇到了类似的需求,其实实现画板功能并不复杂,所以我就打算在这里 ...

  5. Android手摸手实现一个画板功能(一)——View的拖拽

    一.概述   从之前项目中抽取出来的一个"画板"功能模块,就是可以在一个空白布局上,添加不同的元素,实现自由组合,暂时没想到啥好名字,姑且叫它"画板"吧.    ...

  6. Android记录20-获取缓存大小和清除缓存功能

    Android开发记录20-获取缓存大小和清除缓存功能 转载请注明:IT_xiao小巫  博客地址:http://blog.csdn.net/wwj_748 前言 本篇博客要给大家分享的如何获取应用缓 ...

  7. Android自定义view-电子签名画板

    电子签名作为用户的电子凭证,在很多业务中都有用到! 一.自定义电子签名画板 package com.kxf.androidtestdemo.view;import android.content.Co ...

  8. Android画板开发(二) 橡皮擦实现

    Android画板开发(一) 基本画笔的实现 Android画板开发(二) 橡皮擦实现 Android画板开发(三) 撤销反撤销功能实现 Android画板开发(四) 添加背景和保存画板内容为图片 A ...

  9. android 绘画开源,Android 开源可缩放平移的绘画板

    ScaleSketchPadDemo 此项目包含两个模块 app1 为普通绘画板 app2 为可所发的绘画板 方便各位Android 开发者理解和使用 用法: clone or download 项目 ...

最新文章

  1. Python各种包下载地址
  2. 博客项目之设计访客统计
  3. java final 意思_在java中一个类被声明为final类型,表示的意思是()。
  4. django models中批量导入数据
  5. Develop系列-API Guides-简介-应用基础
  6. 深度学习(四十)优化求解系列(2)简单理解神经网络求解过程-未完待续
  7. AAC 文件解析及解码流程
  8. 设计一个递归算法释放二叉树bt中的所有结点(二叉树采用二叉链表存储结构)
  9. oppo手机使用应用沙盒动态修改imei信息
  10. POI 模板生成word PDF——牛X神器
  11. linux cpu大小,如何查看linux cpu大小
  12. 分享9款“神器级”的网站,你值得拥有!不收藏简直是巨大的损失
  13. 怎样用网址查询微信公众号的二维码
  14. 招商银行信用卡中心笔测
  15. Turtlebot+ROS Stage仿真环境实现MPC轨迹跟踪
  16. java留言板_java实现留言板功能实例
  17. JVM 调优参数总结
  18. MySQL Study之--Mysql数据库备份工具(mysqldump)
  19. 分析:中国股市独步天下
  20. 虚拟光驱dameon tools 残留 文件catch!删除方法

热门文章

  1. 活体检测综述 Deep Learning for Face Anti-Spoofing: A Survey 阅读记录
  2. 蓝桥杯_大胖子走迷宫
  3. vbscript On Error语句
  4. 天津出差系列(七)----第七天
  5. 开发那些事儿:在Flv.js前端播放器中解析并绘制H.264编码中的SEI信息
  6. 下一代手机设计的发展趋势
  7. TIA博途中变长数组的介绍与使用入门示例
  8. 创邻科技Galaxybase荣获2021年度IT168技术卓越奖
  9. 甲级测绘资质审批常见问题-甲级测绘资质如何办理?
  10. 比尔盖兹的十一项人生建议