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.设置断点 选定要设置断点的代码 ...
随机推荐
- POJ 2363
#include<iostream> #include<stdio.h> using namespace std; int main() { //freopen("a ...
- POJ 1125
#include<iostream> #include<stdio.h> #define MAXN 102 #define inf 100000000 using namesp ...
- DIV居中的几种方法
1. body{ text-align:center; } 缺点:body内所有内容一并居中 2. .center{ position: fixed; left: 50%; } 缺点:需要设置posi ...
- Linux CentOS7系统中mysql8安装配置
mysql是世界上最流行的关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司所有.今天我将记录一下如何在Linux centos7系统上安装和配置MySQL. 目录 环境准 ...
- C++实现的字符串模糊匹配
C++基本没有正则表达式功能,当然像Boost里提供了正则.本文来源于博客园园友的一篇文章,请看: C/C++ 字符串模糊匹配 很早之前就看过这篇文章,原作者的需求很明确.代码实现也很好. 之所以又写 ...
- php 页面 不显示任何错误提示
error_reporting(0); ini_set('html_errors',false); ini_set('display_errors',false);
- android Butter Knife 使用详解
Butter Knife github连接:https://github.com/JakeWharton/butterknife 本文使用的butterknife版本7.0.1 butterknife ...
- Android 开发工具类 01_AppUtils
1.获取应用程序名称: 2.获取应用程序版本信息. import android.content.Context; import android.content.pm.PackageInfo; imp ...
- 微服务Kong(十)——负载均衡参考
KONG为请求多个后端服务提供了多种负载均衡方案:一种是简单的基于DNS,另一种是更加动态的环形均衡器,他在不需要DNS服务器的情况下也允许服务注册. 一.基于DNS的负载均衡 当使用基于DNS的负载 ...
- Java虚拟机(三):JVM垃圾回收机制
概述 垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了. jvm 中,程序计数器.虚拟机栈.本地方 ...