本人小菜鸟一枚,最近想做画板(用的疯狂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画板,橡皮擦为黑色痕迹的问题相关推荐

  1. Android画板开发(二) 橡皮擦实现

    Android画板开发(一) 基本画笔的实现 Android画板开发(二) 橡皮擦实现 Android画板开发(三) 撤销反撤销功能实现 Android画板开发(四) 添加背景和保存画板内容为图片 A ...

  2. Android画板开发(四) 添加背景和保存画板内容为图片

    Android画板开发(一) 基本画笔的实现 Android画板开发(二) 橡皮擦实现 Android画板开发(三) 撤销反撤销功能实现 Android画板开发(四) 添加背景和保存画板内容为图片 A ...

  3. Android画板开发(一) 基本画笔的实现

    Android画板开发(一) 基本画笔的实现 Android画板开发(二) 橡皮擦实现 Android画板开发(三) 撤销反撤销功能实现 Android画板开发(四) 添加背景和保存画板内容为图片 A ...

  4. android画板需求分析,基于Android的画板的设计与实现论文.doc

    基于Android的画板的设计与实现论文.doc 职场大变样社区( . zcdby. com):下载毕业设计成品全套资料,全部50元以下 毕业设计(论文)任务书 毕业设计(论文)题目: 基于Andro ...

  5. Android判断当前是不是黑色主题

    Android判断当前是不是黑色主题 inline val Context.isDarkTheme: Booleanget() = (resources.configuration.uiMode an ...

  6. android画板控件,GitHub - imaiya/PainterView: Android画板控件,可以写字画画并生成图片...

    PainterView Android画板控件,可以写字画画并生成图片 引用 最新版本号 Gradle Project.gradle allprojects { repositories { jcen ...

  7. android 画板之橡皮擦功能开发

    记录一下橡皮擦功能开发. 讲一下原理: 橡皮擦功能要用到Paint类的一个属性: paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DS ...

  8. android 画板菜单,Android画板实现

    public class ActionerView extends View { private Paint mPaint = new Paint(); private Path mPath = ne ...

  9. Android画板控件,可以写字,签名,画画并生成图片

    1效果图 实现步骤 1.添加画板控件module 画板控件module下载:https://download.csdn.net/download/meixi_android/10774781 2.xm ...

最新文章

  1. PHP写时复制, 变量复制和对象复制不同!!!
  2. 树莓派上利用 Tensorflow 实现小车的自动驾驶
  3. 功能强大的被动开源情报自动化侦察框架
  4. alter system flush shared_pool的作用 .
  5. Happy Holidays and Season's Greetings Everyone!
  6. Solaris 10主动安顿DVD运用步骤
  7. 【C++ STL学习之四】容器list深入学习
  8. 三星w2014android,三星W2014评测:机身细节及内部设计
  9. Java Web应用调优线程池
  10. synchronized 为什么不能使用string对象而是要使用string.intern
  11. 改进型MUSIC算法(python)
  12. pt,px,屏幕尺寸,分辨率以及ppi关系与换算
  13. java为什么 foreach比for效率高
  14. 1月23日阴阳师服务器维护,阴阳师1月23日体验服更新 双神降临概率UP
  15. 内网visual studio code remote-ssh远程离线服务器
  16. 当你追求女生时,你们聊些什么?
  17. android获取ion信息,[RK3288][Android6.0] ION 流程和使用小结
  18. 用python将txt文本中的数据导入excel
  19. arduino如何加载OLED屏幕库
  20. H5超级好用的可编辑属性contenteditable

热门文章

  1. android 打开屏幕,Android打开屏幕
  2. ajax 获取数据
  3. 初级信息处理技术员access教程_软考初级的信息处理技术员请问怎么复习好?
  4. 代码发布前后的注意事项
  5. 华为和H3C--VRP基础和基本的操作
  6. nasm寄存器xmm[0~8使用]
  7. 插入数据时出现Duplicate entry ‘XXX‘ for key ‘XXX‘
  8. 岭回归原理简单分析与理解
  9. python web微信应用(二) webwx 模块源码
  10. 微信开发者工具报错 系统错误,错误码-1,undefined 问题解决