如何在Android中的绘画应用程序中实现撤消功能?

2023-12-08

我想在我的应用程序中执行撤消功能。为此,我进行了搜索,发现采用 x,y 点的数组列表,我在下面的代码中完成了这些操作,但我无法撤消绘图?

public Drawview(Context context, float x, float y, int r) {
            super(context);


            mBitmap = Bitmap.createBitmap(800, 1200, Bitmap.Config.ARGB_8888);
           // mainbitmap.add(mBitmap);
            //System.out.println("**mBitmapPaint***"+mBitmapPaint);
            mCanvas = new Canvas(mBitmap);
            mPath = new Path();
            mBitmapPaint = new Paint(Paint.DITHER_FLAG);



        }

       @Override
       protected void onSizeChanged(int w, int h, int oldw, int oldh) {
           super.onSizeChanged(w, h, oldw, oldh);
       }

        @Override 
        protected void onDraw(Canvas canvas) {

            System.out.println("***Drawinglines****"+Drawinglines);

                canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
                canvas.drawPath(mPath, mPaint);



        }


        private float mX, mY;
        private static final float TOUCH_TOLERANCE = 4;

        private void touch_start(float x, float y) {
            mPath.reset();
            mPath.moveTo(x, y);
            mX = x;
            mY = y;
        }

        private void touch_move(float x, float y) {
            float dx = Math.abs(x - mX);
            float dy = Math.abs(y - mY);
            if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
                mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);
                mX = x;
                mY = y;
            }
        }

        private void touch_up() {


            mPath.lineTo(mX, mY);
            mCanvas.drawPath(mPath, mPaint);
        ///    path.
            //graphics.add(mPath);
            mPath.reset();
        }

        // events when touching the screen
        public boolean onTouchEvent(MotionEvent event) {

             event.getAction();
            int eventaction = event.getAction(); 

            int X = (int)event.getX(); 
            int Y = (int)event.getY(); 

            switch (eventaction ) { 

            case MotionEvent.ACTION_DOWN: 

            {
                touch_start(X, Y);
                }
                 invalidate(); 
                 break; 


            case MotionEvent.ACTION_MOVE:  

                System.out.println("***ACTION_MOVE**************"+X+"************"+Y);
                if((Drawinglines.equals("Pen"))||(Drawinglines.equals("Erase")))
                {
                  touch_move(X, Y);
                  temp_point.add(new Point(X,Y));

                }
                invalidate(); 
                break; 

            case MotionEvent.ACTION_UP: 

                main_Points.add(temp_point);
                temp_point = null;

                 touch_up();  

                 invalidate(); 
                 break; 
            } 

            return true; 

        }




        public void undopath()
        {   
              main_Points.remove(main_Points.size()-1);
             invalidate();
        }

    }
    @Override
    public void onClick(View v) {


        if(v ==  Undo)
        {    
            Drawview abc=new Drawview();
             abc.undopath();
        }

但撤消撤消功能不起作用。


private Slate mSlate;
private TiledBitmapCanvas mTiledCanvas;

 public void clickUndo(View unused) {

        mSlate.undo();
    }


public void undo() {
        if (mTiledCanvas == null) {
            Log.v(TAG, "undo before mTiledCanvas inited");
        }
        mTiledCanvas.step(-1);

        invalidate();
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Android中的绘画应用程序中实现撤消功能? 的相关文章

  • 如何访问 Android 心率传感器原始数据? (反射光,不是心跳)

    心率传感器上的 android sdk 仅返回计算出的 bpm 我对此不感兴趣 我需要访问 Android 心率传感器原始数据 例如就反射值的强度而言将会很大 因为心率传感器基本上使用 LED 并测量随时间变化的反射率 如果可能 访问由任何
  • 用于 Kotlin 中单元测试的 BuildConfigField 模拟

    我正在尝试尽可能多地涵盖Kotlin Android 库我遇到了有关自定义 BuildConfig 变量的问题 更广为人知的是buildConfigField 我想模拟这个变量来测试两者true and false values 从 Gra
  • 预乘 Alpha 合成

    我正在尝试实现预乘阿尔法混合 在本页 什么是颜色混合 https learn microsoft com en us previous versions windows xna bb976070 v xnagamestudio 41 它们确
  • 为什么不能在 Fragment 中使用 ViewPager?它实际上是

    有信息无法使用ViewPager在一个Fragment在许多来源中 例如 Android 开发者繁忙编码指南 http commonsware com 作者 Mark Murphy 或者类似的帖子this https stackoverfl
  • 音频流的最佳实践

    我正在编写一个应用程序来播放远程服务器的音频 我尝试了多种方法来实现流音频 但它们对我来说都不够好 这就是我尝试过的 幼稚地使用 MediaPlayer 就像是 MediaPlayer player new MediaPlayer play
  • Android Camera.takePicture() 有时不返回?

    我正在编写一个Android 拍照应用程序 该代码在 onPreviewFrame byte data Cameracamera 中从预览中获取帧后进行一些处理 问题在于 android hardware Camera 的函数 takePi
  • 嵌套 XML 布局文件

    android 有没有办法从另一个布局文件引用 xml 布局文件 为了更好地解释 我有一个名为layout1 xml 和layout2 xml 的布局文件 我可以从layout1 xml引用layout2 xml吗 用这个
  • Play 商店中的应用描述更新

    我想更新应用程序的描述以及 Play 商店上的屏幕截图 但应用程序保持相同 即相同的版本号 我不想发布新应用程序 因为应用程序中没有任何更改 这可能吗 谷歌也会要求更新应用程序吗 您可以更新描述 也可以更改屏幕截图 您的应用程序将保持不变
  • java.lang.IllegalAccessError:预验证类中的类引用在运行测试项目时解析为意外实现?

    在实施项目工作正常之后 我使用第三方库 zxing 实施了项目 然后在我编写了一个测试项目对我的项目进行单元测试之后 运行测试项目后 主项目 类及其方法没有给出任何信息错误 但如果在主项目的该方法中使用任何 zxing 框架类 则会在运行时
  • 在 NFC 标签扫描期间,onNewIntent() 内的intent.getAction() 为 null

    这是我第一次使用 NFC 标签 我在清单中声明了 NFC 扫描活动
  • Android L,使用 joda.time 库的异常

    该应用程序适用于所有设备 包括 nexus 5 和 nexus 7 在 Android L 预览版上运行相同的应用程序时 应用程序崩溃了 我一直在调试 并且调用 DateTime 构造函数发现了异常 public static String
  • 在光标所在行强制关闭!

    嘿 我正在尝试创建一个应用程序来查找存储在 SQlite 数据库中的 GPS 数据 但我面临一个问题 我构建了一个 DbAdapter 类来创建数据库 现在我尝试使用以下函数从另一个类获取所有数据上的光标 public Cursor fet
  • 如何在android中的谷歌地图上聚焦标记

    我只是想知道我们是否可以关注 Android 应用程序中添加的标记 如果是 怎么办 或者有没有其他方法可以完成这项任务 可以说我使用下面的代码添加了一个标记 map addMarker new MarkerOptions title tit
  • Android:WebView/BaseInputConnection 中的退格键

    我在 Android 4 2 中遇到软键盘退格问题 我在 WebView CodeMirror 中有一个自定义编辑器 它使用一个空的
  • 我在 android studio 中使用 kotlin 时出现错误

    为什么会出现这个错误 09 12 16 36 31 502 1886 1886 com getloction nourmedhat smartgate getlocation E AndroidRuntime 致命异常 main 进程 co
  • Android - 存储对ApplicationContext的引用

    我有一个静态 Preferences 类 其中包含一些应用程序首选项和类似的内容 可以在那里存储对 ApplicationContext 的引用吗 我需要该引用 以便我可以在不继承 Activity 的类中获取缓存文件夹和类似内容 你使用的
  • Android 的 Intent 和 Parcelable 对象

    为什么我需要打包我的对象 即使我只需将其发送到同一任务的另一个线程 实际上 我需要打开一个甚至可以在同一线程 主线程 上运行的活动 换句话说 为什么 Google 不提供一个 startActivity 版本 它采用通用对象广告参数而不是捆
  • Android 中 Activity 之间的 3D 动画

    How to create animation between two Activity look like As Screen shot in android 搜索jazzyviewpager 这是link https github co
  • 用于请求带有临时缓存的远程 Observable 的 RxJava 模式

    用例是这样的 我想暂时缓存最新发出的昂贵的Observable响应 但在它过期后 返回到昂贵的源Observable并再次缓存它 等等 一个非常基本的网络缓存场景 但我真的很难让它工作 private Observable
  • Android:透明活动问题

    最近 在我们的一款生产应用程序上 透明活动已停止工作 我的意思是它变成了黑色背景而不是透明背景 当我将活动的背景颜色设置为纯色 即红色 绿色等 时 它的应用不会出现问题 该问题可能是由于迁移到 AndroidX 引起的 但我没有这方面的证据

随机推荐

  • 如何在iphone sdk中设置音频文件或录制的音频文件的音高?

    我正在重新编码文件 或者我有音频文件 我想更改音高并播放音频文件 如何在使用 Objective C 的 iPhone 程序中设置音调 请帮助我摆脱这个困境 谢谢你 马丹 莫汉 简单的方法是使用与记录文件所用的采样率不同的采样率来播放它 例
  • $q defer 和 Promise 以及如何使用它们在渲染视图之前为控制器加载数据

    这是我发现的最相关的事情 https stackoverflow com a 11972028 110233 当我只想返回一个东西时 它似乎工作得很好 但是当其他东西依赖于第一件事时 我不确定如何返回多个东西 由于这有点迟钝 这里有一个关于
  • JavaScript - 如何将 onload 函数内定义的变量取出?

    我想获取html页面中的所有输入元素 我试过这个 window onload function input document querySelectorAll input 但是 当我用外面的警报功能检查它时onload 它没有做任何事情 a
  • Spring Data Gemfire 定位器

    我正在尝试使用 Spring Data Gemfire 设置 Gemfire 集群 我可以开始一个locator via gfsh我可以开始server通过春天 问题是 我找不到启动的方法locator通过春天 也许最简单 最简单的方法是在
  • 删除单个产品选项卡并添加相关内容 在 Woocommerce 中

    我有一个客户想要将 WooCommerce 中单个产品页面选项卡中默认的信息提取到页面上的不同位置 并完全删除选项卡 共有三个默认产品选项卡 产品描述 附加信息 和评论 删除选项卡并设置要显示的描述很容易设置 wp content plug
  • 如何对放置在详细信息带中的子报表返回的值求和?

    I have a report and a subreport that basically prints this 这是主要报告的代码
  • 为什么一元 * 运算符没有“操作数不得是指向 void 的指针”的约束?

    C2x 6 5 3 2 地址和间接运算符 约束 2 一元 运算符的操作数应为指针类型 为什么没有 操作数不能是指向的指针 的约束void 虽然可以从以下推论 C2x 6 5 3 2 地址和间接运算符 语义 4 The 一元 运算符表示间接
  • 用C读取YUV图像

    如何读取任何 yuv 图像 如何将 YUV 图像的尺寸传递到缓冲区以进行读取 通常 当人们谈论 YUV 时 他们谈论的是YUV 4 2 0 您参考的anyYUV 图像具有误导性 因为有多种不同的格式 并且每种格式的处理方式不同 例如 原始
  • foreach Laravel-5 <选项选择

    我尝试了很多代码变体 并试图在其他主题中找到类似的问题 所以 我有表 users 其中每个用户都有一个城市 存储为数字 当然还有带有城市 ID 和名称的表 city 有 40 个城市 当真实用户打开他的个人资料设置页面时 我希望选择他的城市
  • JavaScript 随机顺序函数

    我有以下问题 我想调用我的函数func1 func2 func3 以随机顺序 但我想确定的是every函数被调用 如果可能的话 不使用任何函数也很好 只是代码序列的随机顺序 像这样 function xy Call this sequenc
  • Java/JAXB:根据属性将 Xml 解组到特定子类

    是否可以使用 JAXB 根 据 xml 的属性将 xml 解组到特定的 Java 类
  • 如何使用 AWS Rekognition 在 Swift 3 中比较人脸

    我一直在尝试使用 AWSRekognition SDK 来比较人脸 然而 亚马逊没有关于如何将其 SDK 与 iOS 集成的文档 他们有显示如何使用识别的链接 开发者指南 仅提供 Java 示例 而且非常有限 我想知道是否有人知道如何在 S
  • 创建自定义 Windows 10 通知框

    在Windows 10中 右下角有那些灰色的通知框 当您插入 USB 安装更新或 Windows Defender 发现病毒时 它们就会出现 我的问题 我怎样才能创造这些东西 使用自定义消息 如果可能的话 可以在 vbs 或批处理中使用 因
  • 显示加载程序,直到实时链接图像未完全加载 React Native 0.58

    我从 api 接收到一个 JSON 数组 其中图像具有实时链接 因此 在成功渲染数据后 问题是我想显示 gif 直到图像完全加载 该数组是 category Loose Flower id 7 product name Drb Tls Bl
  • Spring MVC:在处理程序方法中的新浏览器窗口中打开链接

    我有一个处理链接点击的控制器 在处理程序方法中 我必须做一些事情 在数据库上 并在新窗口中打开单击的网址 类似于 blank链接中的属性 我使用 redirect url 但它当然会在同一窗口中重定向 有任何想法吗 RequestMappi
  • Java Swing UI 属性列表? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 似乎有大量的 UI 属性可以设置 UIManager put key value 是否有可以设置的所有键的列表 我找到了 Nimbus 外观中使用的
  • 如何选择两列来用数据框绘制?

    apple是一个dataframe 其数据结构如下 apple Date Open High Low Close Adj Close 0 2017 01 03 115 800003 116 330002 114 760002 116 150
  • R中rbind()和bind_rows()之间的区别

    在网络上 我发现rbind 用于按行组合两个数据帧 并且执行相同的任务bind rows 函数来自dplyr 这两种功能有什么区别 哪一种更有效 除了一些差异之外 使用的主要原因之一bind rows over rbind是组合两个具有不同
  • 在 Fortran2003 中,一维假定形状数组可以与 C 互操作吗?

    在 Fortran 2003 中 可分配数组为not与 C 互操作 我认为这与存储在内存中的附加数组信息有关 这可能会干扰 C 解释 但是 如果我将虚拟参数声明为一维假定形状数组怎么办 例如 subroutine outter subrou
  • 如何在Android中的绘画应用程序中实现撤消功能?

    我想在我的应用程序中执行撤消功能 为此 我进行了搜索 发现采用 x y 点的数组列表 我在下面的代码中完成了这些操作 但我无法撤消绘图 public Drawview Context context float x float y int