Android画板,橡皮擦为黑色痕迹的问题
本人小菜鸟一枚,最近想做画板(用的疯狂Android讲义中,双缓冲技术那种),遇到一个橡皮擦为黑色痕迹的问题,网上搜索资料,基础太差,实在看不懂,于是写下自己的解决办法,帮助跟我同样的小白。
1.画线改用画圆
问题2.改用画圆后出现,手松开后,橡皮擦效果才显示出来?
解决:在onTouchEvent 的MotionEvent.ACTION_MOVE中,每次都将写到内存中区canvas.drawPath(path, paint); ----------- -----就是每次移动时,都加上与手松开时调用的方法
第一次发,废话有点多,好吧,上代码(代码太烂,轻喷)
public class DrawView extends View{float preX;float preY;private Bitmap cacheBitmap = null;//画布Canvas canvas = null;//画笔public Paint paint = null;private Path path = null;//屏幕宽度 private int width;//屏幕高度 private int height;public boolean isRubber = false;public DrawView(Context context, AttributeSet set) {super(context,set);WindowManager wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);width = wm.getDefaultDisplay().getWidth();height = wm.getDefaultDisplay().getHeight();cacheBitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);canvas = new Canvas();canvas.drawColor(Color.TRANSPARENT);path = new Path();//给画布设置bitmapcanvas.setBitmap(cacheBitmap);//初始化画笔信息setPaint(Color.BLACK,Params.initStrokeWidth); }public void setPaint(int color){isRubber = false;setPaint(color,5);}//初始化画笔信息public void setPaint(int color,int strokeWidth){System.out.println("===========setPaint==========");paint = new Paint(Paint.DITHER_FLAG);paint.setColor(color);// 设置画笔风格paint.setStyle(Paint.Style.STROKE);paint.setStrokeWidth(strokeWidth);// 反锯齿paint.setAntiAlias(true);paint.setDither(true);}//初始化画笔信息public void setRubber(){isRubber = true;paint = new Paint(Paint.DITHER_FLAG);// 设置画笔风格paint.setStyle(Paint.Style.STROKE);paint.setStrokeWidth(Params.initStrokeWidth + 5);// 反锯齿paint.setAntiAlias(true);paint.setDither(true);paint.setXfermode(new PorterDuffXfermode(Mode.DST_OUT));}@Overridepublic boolean onTouchEvent(MotionEvent event) {float x = event.getX();float y = event.getY();switch (event.getAction()) {case MotionEvent.ACTION_DOWN:System.out.println("====MotionEvent.ACTION_DOWN===DOWN");path.moveTo(x, y);preX = x;preY = y;break;case MotionEvent.ACTION_MOVE:System.out.println("====MotionEvent.ACTION_MOVE:===MOVE");path.quadTo(preX, preY, x, y);preX = x;preY = y;if(isRubber){//这样性能可能会很差,自己想办法解决canvas.drawPath(path, paint); // 橡皮擦关键点================== 看这里 问题2解决============}break;case MotionEvent.ACTION_UP:System.out.println("====MotionEvent.ACTION_UP===UP");canvas.drawPath(path, paint); //用画笔和路径画一张图片path.reset(); //重置路径break;}invalidate();//重新绘制 onDrawreturn true;} @Overrideprotected void onDraw(Canvas canvas) {Paint bmpPaint = new Paint();// 将cacheBitmap绘制到该View组件上canvas.drawBitmap(cacheBitmap, 0, 0, bmpPaint);if (isRubber) { //橡皮擦走这边 ======================看这里 问题一解决======================canvas.drawCircle(preX, preY, 5, paint);} else {canvas.drawPath(path, paint);}}}
Android画板,橡皮擦为黑色痕迹的问题相关推荐
- Android画板开发(二) 橡皮擦实现
Android画板开发(一) 基本画笔的实现 Android画板开发(二) 橡皮擦实现 Android画板开发(三) 撤销反撤销功能实现 Android画板开发(四) 添加背景和保存画板内容为图片 A ...
- Android画板开发(四) 添加背景和保存画板内容为图片
Android画板开发(一) 基本画笔的实现 Android画板开发(二) 橡皮擦实现 Android画板开发(三) 撤销反撤销功能实现 Android画板开发(四) 添加背景和保存画板内容为图片 A ...
- Android画板开发(一) 基本画笔的实现
Android画板开发(一) 基本画笔的实现 Android画板开发(二) 橡皮擦实现 Android画板开发(三) 撤销反撤销功能实现 Android画板开发(四) 添加背景和保存画板内容为图片 A ...
- android画板需求分析,基于Android的画板的设计与实现论文.doc
基于Android的画板的设计与实现论文.doc 职场大变样社区( . zcdby. com):下载毕业设计成品全套资料,全部50元以下 毕业设计(论文)任务书 毕业设计(论文)题目: 基于Andro ...
- Android判断当前是不是黑色主题
Android判断当前是不是黑色主题 inline val Context.isDarkTheme: Booleanget() = (resources.configuration.uiMode an ...
- android画板控件,GitHub - imaiya/PainterView: Android画板控件,可以写字画画并生成图片...
PainterView Android画板控件,可以写字画画并生成图片 引用 最新版本号 Gradle Project.gradle allprojects { repositories { jcen ...
- android 画板之橡皮擦功能开发
记录一下橡皮擦功能开发. 讲一下原理: 橡皮擦功能要用到Paint类的一个属性: paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DS ...
- android 画板菜单,Android画板实现
public class ActionerView extends View { private Paint mPaint = new Paint(); private Path mPath = ne ...
- Android画板控件,可以写字,签名,画画并生成图片
1效果图 实现步骤 1.添加画板控件module 画板控件module下载:https://download.csdn.net/download/meixi_android/10774781 2.xm ...
最新文章
- PHP写时复制, 变量复制和对象复制不同!!!
- 树莓派上利用 Tensorflow 实现小车的自动驾驶
- 功能强大的被动开源情报自动化侦察框架
- alter system flush shared_pool的作用 .
- Happy Holidays and Season's Greetings Everyone!
- Solaris 10主动安顿DVD运用步骤
- 【C++ STL学习之四】容器list深入学习
- 三星w2014android,三星W2014评测:机身细节及内部设计
- Java Web应用调优线程池
- synchronized 为什么不能使用string对象而是要使用string.intern
- 改进型MUSIC算法(python)
- pt,px,屏幕尺寸,分辨率以及ppi关系与换算
- java为什么 foreach比for效率高
- 1月23日阴阳师服务器维护,阴阳师1月23日体验服更新 双神降临概率UP
- 内网visual studio code remote-ssh远程离线服务器
- 当你追求女生时,你们聊些什么?
- android获取ion信息,[RK3288][Android6.0] ION 流程和使用小结
- 用python将txt文本中的数据导入excel
- arduino如何加载OLED屏幕库
- H5超级好用的可编辑属性contenteditable
热门文章
- android 打开屏幕,Android打开屏幕
- ajax 获取数据
- 初级信息处理技术员access教程_软考初级的信息处理技术员请问怎么复习好?
- 代码发布前后的注意事项
- 华为和H3C--VRP基础和基本的操作
- nasm寄存器xmm[0~8使用]
- 插入数据时出现Duplicate entry ‘XXX‘ for key ‘XXX‘
- 岭回归原理简单分析与理解
- python web微信应用(二) webwx 模块源码
- 微信开发者工具报错 系统错误,错误码-1,undefined 问题解决