当前位置: 首页 > news >正文

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

第一展示设置画笔颜色的功能,第二展示设置画笔大小的颜色,而第三则展示橡皮擦的功能,这节将图标颜色设置为了蓝色,并且,增加了最左边的按钮(其实,就是在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

相关文章:

  • dll文件可以在Android上用吗,在Android应用程序中使用dll文件
  • html给看板娘添加语音,如何在网页上插入一个看板娘
  • Android调用美图皮肤接口,首创皮肤识别 美图秀秀android新版上线
  • 没有什么效果的html标签,h1fontcolor=red为什么像这样的标签输入没有效果呢.。。。/font/h1_html/css_WEB-ITnose...
  • 计算机网络范围覆盖类别,计算机网络如何分类和计算机网络的类别
  • 台式计算机启用时间查看,win7系统如何查看电脑的开关机时间想知道是否有他人使用...
  • 文献检索是利用计算机对文献,文献检索计算机课.ppt
  • 利用计算机属性将字符串逆序输出,字符串逆序的各种实现算法
  • 域控重定向停用计算机,域控问题解决意见及调整内容20110724
  • 在教学中利用计算机软件给学生演示,2013年远程教育本科全国统考计算机应用基础模拟题及答案(8)...
  • html5 船,基于HTML5的移动船舶监控应用研究
  • xp如何添加桌面计算机回收站,详解桌面回收站图标在XP电脑中操作删除的详细步骤...
  • 计算机网口禁用,电脑并口被禁用解决方法
  • 河海大学计算机与信息学院怎么样,河海大学信息学部怎么样?好不好?
  • 计算机控制系统第1次作业,计算机控制系统第1次作业-86分.doc
  • Android系统模拟器绘制实现概述
  • Bytom交易说明(账户管理模式)
  • ES6 学习笔记(一)let,const和解构赋值
  • HTTP中的ETag在移动客户端的应用
  • leetcode讲解--894. All Possible Full Binary Trees
  • Python 基础起步 (十) 什么叫函数?
  • Redux 中间件分析
  • SpiderData 2019年2月16日 DApp数据排行榜
  • Sublime Text 2/3 绑定Eclipse快捷键
  • 关于for循环的简单归纳
  • 近期前端发展计划
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 微信小程序开发问题汇总
  • 异常机制详解
  • 【云吞铺子】性能抖动剖析(二)
  • 扩展资源服务器解决oauth2 性能瓶颈
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • ###C语言程序设计-----C语言学习(6)#
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • (03)光刻——半导体电路的绘制
  • (BFS)hdoj2377-Bus Pass
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (九)信息融合方式简介
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET gRPC 和RESTful简单对比
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET 中让 Task 支持带超时的异步等待
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .NET和.COM和.CN域名区别
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • .net专家(高海东的专栏)
  • @KafkaListener注解详解(一)| 常用参数详解