android之画板功能之橡皮擦 画笔大小和画笔颜色
第一展示设置画笔颜色的功能,第二展示设置画笔大小的颜色,而第三则展示橡皮擦的功能,这节将图标颜色设置为了蓝色,并且,增加了最左边的按钮(其实,就是在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 = ;
private int currentStyle = ;
//设置画笔样式
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);
if(currentStyle == )
mPaint.setColor(currentColor);
else{
mPaint.setColor(Color.WHITE);
}
}
//初始化画布
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){ if(which == ){
currentStyle = ;
setPaintStyle();
}
//当选择的是橡皮擦时,设置颜色为白色
if(which == ){
currentStyle = ;
setPaintStyle();
mPaint.setStrokeWidth();
}
}
设置画笔大小:
//选择画笔大小
public void selectPaintSize(int which){ int size =Integer.parseInt(this.getResources().getStringArray(R.array.paintsize)[which]);
currentSize = size;
setPaintStyle();
}
设置画笔颜色:
//设置画笔颜色
public void selectPaintColor(int which){ currentColor = paintColor[which];
setPaintStyle();
}
当然了,这些方法都是在自定义view,即PaintView中实现的,接下来就是通过单击底部按钮,调用自定义View的方法,实现相应的功能
//选择画笔样式
case :
showMoreDialog(view);
break;
//画笔大小
case :
showPaintSizeDialog(view);
break;
//画笔颜色
case :
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();
}
这里面用到arrays.xml,如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="paintstyle">
<item>@string/track_line</item>
<item>@string/Eraser</item>
</string-array>
<string-array name="paintsize">
<item></item>
<item></item>
<item></item>
<item></item>
<item></item>
<item></item>
</string-array> <string-array name="paintcolor">
<item>RED</item>
<item>BLUE</item>
<item>BLACK</item>
<item>GREEN</item>
<item>YELLOW</item>
<item>CYAN</item>
<item>LTGRAY</item>
</string-array> </resources>
至此,已实现了画板所有的功能。
其实,还有一个比较有趣的功能,就是为画笔设置一个铅笔的图标,主要原理,就是在自定义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之画板功能之橡皮擦 画笔大小和画笔颜色的更多相关文章
- canvas 实现简单的画板功能添加手机端效果 1.01
在上次的基础上,加了一些代码,手机端可操作 访问网址:https://chandler712.github.io/Item/ <!-- 简单版画板 --> <!DOCTYPE htm ...
- canvas 实现简单的画板功能 1.0
canvas 实现自由画线,变换颜色.画笔大小,撤销上一步等简单功能 <!DOCTYPE html> <html lang="en"> <head&g ...
- Android绘画板(普通绘画模式和缩放平移绘画模式)
ScaleSketchPadDemo 项目地址: demo apk体验下载 demo2 apk体验下载 用法: 进入项目根目录:https://github.com/ShaunSheep/ScaleS ...
- (转)Android之常用功能方法大集合
这些,都是Andorid中比较常用的方法和功能,在网上搜集整理一下记录之,以备不时之需.由于经过多次转载,源文作者不确凿,在此申明,敬请见谅.不得不赞,非常实用. 1.判断sd卡是否存在 boolea ...
- iOS实现白板、画板功能,有趣的涂鸦工具,已封装,简单快捷使用
一.效果图: 二.选择颜色: 分[固定颜色模式]和[自由取模式]. 三.操作栏功能: 1.撤销:撤销上一步操作,可一直往上进行,直到全部清空. 2.清空:直接清除所有绘画. 3.橡皮擦:去除不要的绘 ...
- Android 8.0 功能和 API
Android 8.0 为用户和开发者引入多种新功能.本文重点介绍面向开发者的新功能. 用户体验 通知 在 Android 8.0 中,我们已重新设计通知,以便为管理通知行为和设置提供更轻松和更统一的 ...
- Android 查阅博客1_app优化_1大小
Android App Bundle (google play 商店发布应用的话,可自行深入了解下,这里不做介绍) http://mp.weixin.qq.com/s?__biz=MzAwODY4 ...
- android 获取文件夹、文件的大小 以B、KB、MB、GB 为单位
android 获取文件夹.文件的大小 以B.KB.MB.GB 为单位 public class FileSizeUtil { public static final int SIZETYPE_B ...
- Android Studio调试功能使用总结【转】
Android Studio调试功能使用总结[转] 这段时间一直在使用Intellij IDEA, 今天把调试区工具的使用方法记录于此. 先编译好要调试的程序. 1.设置断点 选定要设置断点的代码 ...
随机推荐
- 做了三年的菜鸟web前端的感悟
作为一名真正的菜鸟我想没有比我更加实在的了,三年之中,虽然做了一二三四五六七个项目,基本都是jQuery写的,但是还是一名不折不扣的菜鸟.这让我很尴尬啊,面对前端大量要学习的东西,真的是很头疼,技术更 ...
- python3 使用 zabbix_client模块
除了上一篇使用自己定义的函数,我们还可使用pipy提供的zabbix_client模块,这样就不用我们自己去写登录函数,只要在模块开始指定用户名密码即可,方便很多. #!/usr/bin/env py ...
- windows下安装并使用redis
一.安装前首先了解一下phpinfo里面的一些信息,能否正确安装非常有帮助. (下图是我的本机环境) compiler :编译器 Architecture :CPU架构 Configuration F ...
- sass中@的作用
总结一下sass中用到@的地方. 1.继承@extend SASS允许一个选择器,继承另一个选择器.比如,现有class1: .class1 { border: 1px solid #ddd; } c ...
- Pycharm 问题:Clear Read-Only Status
用的是ubuntu系统,一直在普通用户模式下打开Git下建的项目,今天运行神经网络程序时,由于有一个cudnn错误,必须要在sudo模式下才不会报错,所以用sudo试着打开了pycharm,发现是完全 ...
- Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)
出自 http://www.jb51.net/article/93125.htm
- Hive中自定义Map/Reduce示例 In Java
Hive支持自定义map与reduce script.接下来我用一个简单的wordcount例子加以说明. 如果自己使用Java开发,需要处理System.in,System,out以及key/val ...
- unity游戏热更新总结
1.利用反射来做Dll更新 这种方式只支持windows以及安卓这种支持JIT的平台,对于IOS就不适用了,IOS这种Full-AOT的平台不支持生成新的代码,因此这种热更方式很少用到. 2.利用 ...
- Codeforces 960G. Bandit Blues
Description 你需要构造一个长度为 \(n\) 的排列 , 使得一个数作为前缀最大值的次数为 \(A\) , 作为后缀最大值的次数为 \(B\) , 求满足要求的排列个数 . 题面 Solu ...
- Java操作elasticsearch
使用 Maven 工程,我的 pom 文件如下所示: <dependencies> <dependency> <groupId>org.elasticsearch& ...