我正在开发一个我创建绘图镜像的项目。我的主要逻辑工作正常。导致问题的唯一原因是重做和撤消功能。

我搜索了很多。实施可能的方法,但无法取得成功。以下是我的绘图课程。

DrawingView.java

private ArrayList paths = new ArrayList();

private ArrayList undonePaths = new ArrayList();

public DrawingView(Context context, AttributeSet attrs){

super(context, attrs);

this.context=context;

setupDrawing();

}

//setup drawing

private void setupDrawing(){

//prepare for drawing and setup paint stroke properties

brushSize = getResources().getInteger(R.integer.small_size);

lastBrushSize = brushSize;

drawPath = new Path();

drawPath1 = new Path();

drawPaint = new Paint();

drawPaint.setColor(paintColor);

drawPaint.setAntiAlias(true);

drawPaint.setStrokeWidth(brushSize);

drawPaint.setStyle(Paint.Style.STROKE);

drawPaint.setStrokeJoin(Paint.Join.ROUND);

drawPaint.setStrokeCap(Paint.Cap.ROUND);

canvasPaint = new Paint(Paint.DITHER_FLAG);

}

//size assigned to view

@Override

protected void onSizeChanged(int w, int h, int oldw, int oldh) {

super.onSizeChanged(w, h, oldw, oldh);

canvasBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);

width=w;

height=h;

Log.d("width,height", w + " , " + h);

drawCanvas = new Canvas(canvasBitmap);

}

//draw the view - will be called after touch event

@Override

protected void onDraw(Canvas canvas) {

for (Path p : paths){canvas.drawPath(p, drawPaint);}

canvas.drawPath(drawPath, drawPaint);

Log.i("OnDRAWING", "REACH ON DRAW");

/*canvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint);

canvas.drawPath(drawPath, drawPaint);

canvas.drawPath(drawPath1, drawPaint);*/

}

//register user touches as drawing action

@Override

public boolean onTouchEvent(MotionEvent event) {

float touchX = event.getX();

float touchY = event.getY();

//respond to down, move and up events

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:

drawPath.reset();

undonePaths.clear();

drawPath.moveTo(touchX, touchY);

undonePaths.clear();

break;

case MotionEvent.ACTION_MOVE:

drawPath.lineTo(touchX, touchY);

break;

case MotionEvent.ACTION_UP:

drawPath.lineTo(touchX, touchY);

drawCanvas.drawPath(drawPath, drawPaint);// commit the path to our offscreen

paths.add(drawPath);

drawCanvas.drawPath(drawPath, drawPaint);

drawPath.reset();

drawCanvas.drawPath(drawPath1, drawPaint);

drawPath1.reset();

break;

default:

return false;

}

//redraw

invalidate();

return true;

}

我在这里缺少什么?

任何建议/想法/例子是在我的项目中实现这种功能的最佳方式吗?

java画图撤销,使用Canvas在Android绘图应用程序中撤消和重做功能相关推荐

  1. java结束程序是什么语句,在Java程序中,每条功能执行语句的最后都必须用结束。...

    在Java程序中,每条功能执行语句的最后都必须用结束. 答: 分号 热继电器可以实现短路保护和过载保护 答:× 皮亚杰用表示通过作用或者操控物体和事件来发现其特点从而获取知识的人 答:建构者 品行包括 ...

  2. java 1.8签名apk_给Android的APK程序签名和重新签名的方法

    签名工具的使用Android源码编译出来的signapk.jar既可给apk签名,也可给rom签名的.使用格式: java –jar signapk.jar [-w] publickey.x509[. ...

  3. java集成lucene_将Lucene搜索集成到应用程序中

    java集成lucene 本文是我们名为" Apache Lucene基础知识 "的学院课程的一部分. 在本课程中,您将了解Lucene. 您将了解为什么这样的库很重要,然后了解L ...

  4. java面试题8 牛客:在Web应用程序中,( )负责将HTTP请求转换为HttpServletRequest对象

    在Web应用程序中,(    )负责将HTTP请求转换为HttpServletRequest对象 A Servlet对象 B HTTP服务器 C Web容器 D JSP网页 首先我们来看看web程序的 ...

  5. java beans 组件_如何利用JavaBeans在应用程序中创建组件?

    JavaBeans模块使开发人员能够创建称之为组件的软件单元(也就是我们熟知的beans).你可以把beans加载在更复杂的组件.Java小型应用程序(applets)或应用程序上.JavaBeans ...

  6. android另开进程,android在一个app程序中,打开另一个app的方法

    使用aapt    //aapt是sdk自带的一个工具,在sdk\builds-tools\目录下 1.以微信为例,命令行中切换到aapt.exe目录执行:aapt dump badging E:\a ...

  7. mongodb ttl java,在mongoDB集合上设置ttl-是在应用程序中还是在shell中?

    I would like to set the ttl for a collection once, what is the idiomatic way of achieving this when ...

  8. android读取另一个app目录,android在一个app程序中,打开另一个app的方法

    首先获取包名: 使用aapt    //aapt是sdk自带的一个工具,在sdk\builds-tools\目录下 1.以微信为例,命令行中切换到aapt.exe目录执行:aapt dump badg ...

  9. java 发邮件给自己,在java应用程序中加入发送邮件的功能 | 改变自己

    javaMai 为建立邮件和消息服务提供了框架,因而应用程序可以发送和接收邮件.JavaMail API 是一个用于阅读.编写和发送电子消息的可选包(标准扩展),可以用来建立基于标准的电子邮件客户机, ...

最新文章

  1. 华为手机怎么看图片属性_如果不能用联发科芯片,华为手机该怎么办,有一招就看华为用不用...
  2. group by 和 having(转载)
  3. 执行SQL-MapperMethod.execute()
  4. 2020牛客暑期多校训练营(第二场)
  5. 纹个鸡儿天才小熊猫_给熊猫用户的5个提示
  6. PWN-PRACTICE-BUUCTF-3
  7. 计算机病毒中毒该怎么办,电脑中毒后该怎么杀毒呢?
  8. Mr.J--树、二叉树、森林的转换
  9. html推箱子过关检测函数,HTML5推箱子实现
  10. 2021CCF推荐国际学术会议A类及相关领域介绍
  11. 【个人博客网页模板】
  12. 中望cad2012专业破解版
  13. 咨询博客园文章如何维权
  14. C语言:str函数(一)
  15. android.graphics.bitmap jar,Android入门之画图详解
  16. 内网环境 CentOS7 搭建本地repo仓库源
  17. 双拼和五笔输入法键盘位浮动贴图,适合初学者使用
  18. 全景拍摄不推荐使用全景相机的背后原因
  19. 第一章 ArcGIS Pro python高级脚本教程介绍
  20. 无法定位程序输入点 except_电脑定时程序

热门文章

  1. 国庆临近,节后端开发3+4面,字节跳动Java内部学习资料泄露
  2. ssh 远程执行命令简介
  3. 自动生成excel中sheet目录导航
  4. 大数据时代社交网络个人信息安全问题研究
  5. 一楼二楼教师办公室图书馆操场计算机房,新PEP人教版四年级英语下册常用单词、常用表达法默写用纸...
  6. 苹果cmsV10高端大气简洁网站模板带后台好看的自适应模板
  7. 人工智能的利弊及如何做能最安全的培养人工智能
  8. Markdown流程图绘制
  9. DIY手机锂电池万能充
  10. 重新理解CEO的学习能力----HHR计划----以太入门课