如何在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中的绘画应用程序中实现撤消功能? 的相关文章

  • 使用 google Directions API 的地图视图绘制方向 - 解码折线

    我正在尝试使用 Google 方向 API 在我的地图视图上显示方向 但我在从 JSON 响应获取数据时遇到困难 我可以获得 级别 和 点 字符串 但无法弄清楚如何将它们解码为地图上的点 任何帮助将非常感激 我有一个类可以为您解码它们 添加
  • Twitter 登录说明

    我想在 Android 中创建一个 Twitter 应用程序 为此 我想创建一个登录页面并登录到 Twitter 为此 我们需要消费者密钥和消费者密钥 这是什么意思 要创建此登录页面 除了 Twitter 帐户之外 我们还需要其他任何东西吗
  • Manifest Merger工具:替换失败

    我正在使用一个使用自己的 android theme 的库 因此在构建时收到以下错误 错误 55 9 任务 contacit processDebugManifest 执行失败 清单合并失败 AndroidManifest xml 中的属性
  • 安卓定位不准确

    我正在尝试获取当前用户的位置 我试图重构我的代码以获得更好的结果 但我只是不断得到关于准确度的荒谬位置 它在 900 600 米之间 如何才能得到更好的结果 使其精度达到50m以内 这是我的代码 package com agam mapsl
  • ffmpeg视频已压缩但无法在浏览器中播放

    我已经集成了ffmpeg4android lib 视频压缩工作正常 但视频无法在除 safari 浏览器之外的浏览器中播放 上传到服务器后 我使用了以下命令 ffmpeg y i
  • 调试:在 Android 1.0 中找不到文件

    今天我更新到 Android Studio v 1 0 在尝试编译任何项目时出现以下错误 app build intermediates classes debug 找不到文件 问题是在更新之前我没有任何问题 这是我实际尝试编译的代码 构建
  • 如何在手机缓存中保存用户名和密码

    我有一个用户登录应用程序 它需要用户的电子邮件和密码 我想将电子邮件和密码保存在手机缓存中 以便用户不必再次输入 有什么办法可以将数据保存在Android缓存中吗 我认为你需要使用SharedPreference用于在设备中使用应用程序时保
  • Android 应用程序中的 Eszett (ß)

    我的 res layout activity 文件中的德语 字符在我的应用程序中自动转换为 ss 即使我将语言和键盘设置为德语 它仍然不会显示 Android 中可以显示 吗 edit
  • Python tcl 未正确安装

    我刚刚为 python 安装了graphics py 但是当我尝试运行以下代码时 from graphics import def main win GraphWin My Circle 100 100 c Circle Point 50
  • 如何在 Android 模块中使用 FirebaseAuth

    我正在开发一个聊天库 我想在其中显示登录用户的对话 制作该库的原因是我想将其集成到多个项目中 我现在面临的问题是FirebaseAuth表示用户尚未登录 FirebaseAuth getInstance mFirebaseApp getCu
  • Java 文件上传速度非常慢

    我构建了一个小型服务 它从 Android 设备接收图像并将其保存到 Amazon S3 存储桶中 代码非常简单 但是速度非常慢 事情是这样的 public synchronized static Response postCommentP
  • Android:滚动 Horizo​​ntalScrollView 时如何禁用 ScrollView 的垂直滚动?

    我正在开发一个带有带有 ScrollView 的 Activity 的 Android 应用程序 其中包含 Horizo ntalScrollView 等内容 当我触摸 Horizo ntalScrollView 时 我想禁用外部 Scro
  • 在 React Native 中调试应用程序崩溃

    我是 React Native 新手 我正在尝试安装 React Native Facebook SDK 以便我可以使用我的应用程序进行 Facebook 登录 我按照此处列出的步骤操作 https tylermcginnis com in
  • 在游戏视图下添加 admob

    我一直试图将 admob 放在我的游戏视图下 这是我的代码 public class HoodStarGame extends AndroidApplication Override public void onCreate Bundle
  • 在 Android 中调整可绘制对象的大小

    我正在为进度对话框设置一个可绘制对象 pbarDialog 但我的问题是我想每次调整可绘制的大小 但不知道如何调整 这是一些代码 Handler progressHandler new Handler public void handleM
  • HERE 地图:更改路线已行驶部分的颜色

    导航时可以改变路线的颜色吗 具体来说 我希望路线中已行驶的部分的颜色与即将行驶的部分的颜色不同 现在都是同一个颜色 将 MapRoute 对象的 TravelColor 变量设置为透明对我来说很有效 mapRoute color Resou
  • 哪些 Flutter 插件或功能可以利用外部 iOS/Android 显示器来显示与主显示器不同的内容

    我正在构建一个跨平台应用程序 需要在外部显示器上显示不同的视图 通常通过连接到 LCD 投影仪的 HDMI 适配器电缆连接 Flutter 是否能够在内置的外部显示器上显示不同的屏幕 在现有的 Flutter 插件中还是使用现有的 Flut
  • 如何在android asynctask中使用inputstream作为参数?

    我正在制作一个 Android 应用程序来跟踪股票详细信息 我将通过 csv 雅虎财经 检索数据 据我所知 在android 4 0中 网络连接无法在主线程上完成 因此 我将使用 asynctask 来建立连接 但是 我在参数方面遇到了一些
  • 在 KitKat 4.4.2 中获取 SDard 路径和大小

    我在 Google Play 上有一个设备信息应用程序 在该应用程序中我有存储信息 我知道 Android 4 4 在访问外部 SD 卡方面发生了一些变化 内部似乎没有给我带来问题 我的问题是 如何可靠地获取 KitKat 上 SD 卡的大
  • Android studio - 如何查找哪个库正在使用危险权限?

    我正在尝试将 apk 上传到 google play 商店 但令我惊讶的是 我正在使用以下权限 Your APK is using permissions that require a privacy policy android perm

随机推荐

  • 如何在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