本人小菜鸟一枚,最近想做画板(用的疯狂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();

//给画布设置bitmap

canvas.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));

}

@Override

public 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();//重新绘制 onDraw

return true;

}

@Override

protected 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画板,橡皮擦为黑色痕迹的问题相关推荐

  1. android 闪屏黑色,android Theme启动APP闪屏处理

    //1.设置背景图Theme @drawable/ipod_bg true //2.设置透明Theme true true android:theme="@android:style/The ...

  2. Android微信怎么变成黑色,科技知识:安卓微信怎么变成黑色主题 安卓微信变成黑色主题方法...

    今天要来给大家介绍下安卓微信怎么变成黑色主题 安卓微信变成黑色主题方法,之所以要来给大家针对这个安卓微信怎么变成黑色主题 安卓微信变成黑色主题方法进行一个介绍的主要目的是现在很多小伙伴门对于安卓微信怎 ...

  3. Android Studio 实现的画板App

    基于Android Studio 实现的画板App ** 1.实现目标** 随着科技的不断发展和社会的不断进步,手机越来越流行,成为了人们日常生活和学习的必要工具,人们越来越离不开手机,还在几年前手机 ...

  4. Android之Canvas画画板

    前几篇都涉及到了Canvas,Paint,Bitmap的结合使用,这里就不多说了~ 现在我要写的是画画板这个项目~ 项目效果: 1.画笔的颜色的随意更改 2.画笔的大小也可以随着拖动条的拖动而改变 3 ...

  5. Android可滑动画板,Android 利用 Canvas 画画板

    首先新建一个项目工程,建立文件,如下图所示 首先配置页面布局文件activity_main.xml,如下图所示: xmlns:tools="http://schemas.android.co ...

  6. Android 实现图片画画板

    本文主要讲述了Android 实现图片画画板 设计项目布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk ...

  7. 【Android】用Android写个自己的画板APP

    1.常规操作,创建项目 2.清单文件给权限 <?xml version="1.0" encoding="utf-8"?> <manifest ...

  8. Android自定义View--简易画板

    自定义VIew实现简易画板效果,功能包括清空.选择颜色,选择大小,效果如下 画板布局: <?xml version="1.0" encoding="utf-8&qu ...

  9. android图片_画画板

    一.项目目录结构 二.activity_main.xml界面 三.activity_main.xml代码 <RelativeLayout xmlns:android="http://s ...

  10. android自定义抽奖,Android自定义view制作抽奖转盘

    本文实例为大家分享了Android自定义view制作抽奖转盘的具体代码,供大家参考,具体内容如下 效果图 TurntableActivity package com.bawei.myapplicati ...

最新文章

  1. 网页制作常见的问题(怎样兼容IE6/IE7/火狐浏览器)
  2. 奇葩的报表(连更-对,昨天发生大事了。。。。)
  3. 学JS的心路历程Day28 - PixiJS -基础(二)
  4. 利用Python自动生成暴力破解的字典
  5. OSPF身份验证配置实例
  6. java js隐藏_Javascript匿名函数是否仍然可见? (使用Java applet,这是一种隐藏JS代码的方法)...
  7. P3293-[SCOI2016]美味【主席树】
  8. static内容相关介绍学习
  9. MINA核心结构和处理消息的逻辑流程
  10. 数据结构与算法:动态数组(利用万能指针实现任意类型数组操作)
  11. 安卓学习笔记29:使用SQLite数据库
  12. 【iOS开发】An Apple ID with identifier xxxis not available. Please enter a different string.
  13. 此声明没有存储类或类型说明符
  14. 学python要什么基础-要学Python编程,需要什么样的基础呢?想找这方面工作
  15. linux内核定时器 详解,Linux系统内核定时器机制详解(下)
  16. 关于Arcgis中的裁剪说明
  17. 喝咖啡的好处和坏处及注意事项
  18. IDEA2021.2安装与配置(持续更新)
  19. 实践 基于Arduino 的 HC06蓝牙 控制 TB6612FNG 驱动电机
  20. IDEA导入scala详解

热门文章

  1. 数据库入口和密码:维普、万方和cnki(转)
  2. 慕尼黑工业大学计算机博士申请条件,慕尼黑大学博士条件
  3. Linux 系 统 目 录 详 解
  4. C/S模型与P2P模型
  5. android华为怎么截屏快捷键,华为P9/P9Plus怎么截图 快捷键截图方法介绍
  6. 数学建模--正态分布均值的假设检验
  7. 怦然心动(Flipped)-5
  8. 网络笔记--接入网及网络运营商
  9. 【Appium】手机按键(比如返回键、Home键等)的数字代号总结
  10. 前端开发(html和css)