Android关于创建涂鸦板过程中出现的小问题

我前一段时间在制作涂鸦板的过程中在处理橡皮擦功能上碰上了一些小问题,网上部分资源提到的实现方法和我下面说到的橡皮擦基本方法实现思路大仿类似,以下是基本思路:

橡皮擦就是用和画布颜色一致颜色的画笔在屏幕触摸,实现橡皮擦的功能。

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

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

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

以上为简易的橡皮擦主要是使用和画布相同的的颜色来覆盖,但当背景图为一张照片(背景图)时是不可行的,因为颜色会很明显的展示在背景图上,而且需要注意的是:即使是将画笔颜色变为透明色也是不可行的,综上我们选择用渲染模式来处理橡皮擦

这里选择渲染模式Xfermode的DIS_IN,这样我们处理后会发现出现黑色阴影边框,效果实现了,但是bug非常明显

之后选择渲染模式的CLEAR这个模式会擦除所有像素点,但是发现是以黑色线条的形式去擦除的

通过STACK OVER FLOW网站超找到两者解决办法:

1.改变touch_move方法的path画图的相关方法,效果实现了但是对撤销和重做造成了一定影响(并且所画线不再圆滑),最终没有选用

privatevoid
touch_move(float x,float
y){

float
dx =Math.abs(x-
mX);

float
dy =Math.abs(mY-
y);

if(dx>=
TOUCH_TOLERANCE|| dy>= TOUCH_TOLERANCE){

// 从x1,y1到x2,y2画一条贝塞尔曲线,更平滑(直接用mPath.lineTo也可以)

// mPath.quadTo(mX, mY, (x + mX)
/ 2, (y + mY) / 2);

 

mPath.lineTo(mX,
mY);

mCanvas.drawPath(mPath,
mPaint);

 

//将一条完整的路径保存下来(相当于入栈操作)

savePath.add(dp);

mPath.reset();

 

mPath.moveTo(mX,
mY);

 

 

mX=
x;

mY=
y;

}

}

 

privatevoid
touch_up(){

 

mPath=null;//
重新置空

//mPath.reset();

}

2.最终发现只需要设置默认type就能解决该问题


 setLayerType(LAYER_TYPE_SOFTWARE,null);//设置默认样式,去除dis-in的黑色方框以及clear模式的黑线效果

橡皮擦相关代码


 if (currentStyle == 1) {//正常画笔

            mPaint.setStrokeWidth(currentSize);

            mPaint.setColor(currentColor);

        } else {//橡皮擦

            mPaint.setAlpha(0);

            mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));

            mPaint.setColor(Color.TRANSPARENT);

            mPaint.setStrokeWidth(50);

        }

时间: 2024-08-21 18:46:28

Android关于创建涂鸦板过程中出现的小问题的相关文章

Android Java 与 C++ 调用过程中的常量,路径名、文件名、后缀名最大长度

/**************************************************************************** **************************************************************************** *** ***   This header was automatically generated from a Linux kernel header ***   of the same

Android 通话:后台通话过程中锁屏解锁,发现听筒内存在锁屏提示音

[系统版本]:T0316 [ HW ]:p1 [测试前提]:1.卡1插入移动4G卡 [测试步骤]:1.呼入或呼出一通来电,接听: 2.按home返回后台,锁屏解锁查看. [测试结果]:1.后台通话过程中锁屏解锁,发现听筒内存在锁屏提示音 [预期结果]:1.通话过程中不应存在锁屏提示音 [概 率]:必现 solution: 修改文件:./frameworks/av/services/audiopolicy/AudioPolicyManager.cpp status_t AudioPolicyMan

Maven3.2创建webapp项目过程中问题以及解决方案

用maven组件来创建web项目,maven的好处一大堆,但是在创建项目的时候问题也很多,诸多不顺,网上找了很多资料,貌似都没能解决问题. 环境:jdk1.7.0_80,eclipse4.4,maven3.2.1 注意:测试了jdk1.8.0_65,按照同样的步骤,貌似不能解决问题,如果你们有解决方案,可以告诉我,谢谢. 问题1.The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build

Android无线测试之—Genymotion配置过程中常见问题

一.前提条件: 已经部署好了Android UiAutomator测试环境. 二.在部署Genymotion时遇到了两类问题: 1.通过eclipse打开一个模拟设备,然后将编译好的jar包push到手机/data/local/tmp/目录时报错: G:\adt-bundle-windows-x86-20140702\android-workspace\Demo1>adb push G:\adt-bundle-windows-x86-20140702\android-workspace\Demo

android实现系统电话通话过程中自动感应黑屏

package com.developmenttools.customui.activity; import java.util.HashSet;import java.util.Set; import com.developmenttools.listener.HomeClickListener;import com.yzx.tools.CustomLog; import android.app.Activity;import android.content.BroadcastReceiver

ACM做题过程中的一些小技巧

1.一般用C语言节约空间,要用C++库函数或STL时才用C++; cout.cin和printf.scanf最好不要混用. 2.有时候int型不够用,可以用long long或__int64型(两个下划线__). 值类型表示值介于 -2^63 ( -9,223,372,036,854,775,808) 到2^63-1(+9,223,372,036,854,775,807 )之间的整数. printf("%I64d",a); printf("%lld",a); 3.O

Log4Net写入到数据库配置过程中的一些小问题备忘

问题1: 在公司进行log4net写入服务器配置的时候,一切正常,但是在家里的机器上,就频繁出现这个问题: SQL Server 2008 报错:已成功与服务器建立连接,但是在登录前的握手期间发生错误 并且这种错误是随机性的,在log4net往数据库插入几条的时候,没问题,但是插入次数一多起来,就频繁报这个错误.后来没办法,网上搜罗了一圈,最终发现了解决方案: 将相关的TCP参数都设置为启动之后,就再没遇到过问题. 问题2,log4net配置都正确,但是一直无法写入数据库. 这个问题困扰了好久,

Spirng MVC 使用过程中的一些小问题

1.spring mvc(3.0.7)版本中,上传文件时,参数必须加上@RequestParma,同时该参数必须是数组类型 2.使用json视图时需要添加 jackson-all-1.6.9.jar 注意jar 文件的版本号,2.x版本的jar不能用(包的命名不对). 3.如果使用AOP 需要添加 aopalliance.jar AOP 联盟 4.Spring MVC 的Controller是单实例,多个请求并发访问同一个action,要注意线程安全问题.尽量不要定义全局变量,除非他是只读变量.

【java】使用Junit测试线程过程中出现的小问题

本文内容介绍在使用Junit进行线程测试的时候出现的一个小问题,自己简单做一个记录,以便后续查看 在使用java编写多线程并发实验程序时在Juint写了测试程序,但并没有得到预想的效果. 直接上代码 线程类: package sm.examples.threaddemo; import org.apache.log4j.Logger; public class Thread1 implements Runnable { private static final Logger logger = L