安卓版Canvas中的撤销和重做
我正在使用private void touch_up() { mPath.lineTo(mX, mY); // commit the path to our offscreen mCanvas.drawPath(mPath, mPaint); // I enable the set drawing cache... myView.setDrawingCacheEnabled(true); // ... and I add the cache to the stack undoStack.add(myView.getDrawingCache()); indexOfUndoRedo++; // kill this so we don't double draw mPath.reset(); } 目前仅在修饰后才对堆栈进行更新,因为我仍在弄清楚如何解决此问题.当我想重做时,我会执行以下操作: private void undo() { myView = new MyView
2 2024-02-13
编程技术问答社区
如何在安卓系统中处理视图外的触摸?
我已经找到了" upo bar" 用于Android的Gmail应用程序. " undobar"基本上是在布局顶部显示的视图. 不幸的是,它还没有完成 - 它没有通过触摸栏外屏幕来拆除栏的功能. 我已经实现了FrameLayout覆盖onInterceptTouchEvent处理驳船的bar否则,但接触的动作栏无济于事. 有什么方法可以从动作栏中处理此类事件? 下面有一个图像,其中显示了" undobar".我想实现的目标来处理由红点代表的动作栏中的触摸. 解决方案 尝试覆盖您的活动的调度. dispatchTouchEvent(MotionEvent event){ int x= event.getRawX(); int y= event.getRawY(); if(/*check bounds of your view*/){ // set your views visiblity
0 2024-01-31
编程技术问答社区
内存有限时,位图编辑器的快速撤销/重做?
我正在尝试编写移动设备的位图编辑器(即Photoshop的有限版本).用户的文档由〜4个位图组成,每个尺寸约为1000x500. 我想要一个尽可能简单的稳健有效的撤消/重做系统.我的目标是撤消或重做编辑约0.2秒.我正在寻找有关当前预期方法或可以使用的一些新想法的反馈.我认为我拥有的太复杂了,所以我对继续进行谨慎,所以只知道这就是我能做的最好的事情. 我已经尝试了使用命令模式和我的撤消/重做系统的纪念品模式的组合.到目前为止,我得出的一些结论是: 我没有足够的内存,我无法写入内存以足够快地磁盘,以便在许多情况下使用纪念品来支持上一个命令上的"不执行"操作,例如如果用户很快执行几种单独的油漆笔触,我将无法存储代表用户在而无需使用户等待保存的位图. 如果我将文档还原到其初始状态并重播所有命令,则除了最后一个实现撤消的命令外,它甚至在一定数量的命令之后都太慢了,例如重播10个油漆或5个污迹中的笔触〜1s,这太迟钝了. 我可以通过定期将整个文档保存在磁盘上并在播放命
0 2024-01-22
编程技术问答社区
如何在<textarea>中执行undo/redo,一次对一个单词做出反应,一个单词一个单词,或者一个字符一个字符?
我如何一次在textarea中撤消/重做一次对1个单词的反应,逐字或字符的字符?不一次. 现在,我已经起作用了此功能,但是它对文本方面的所有单词都做出了反应,这是我的情况下功能错误的方法.我需要它可以通过单词而不是所有单词进行反应,以便它像文本编辑器一样起作用.我正在使用Chrome,我需要它以任何网络浏览器或至少用于主要浏览器的字符来逐字或字符起作用. 注意:不建议我使用可编辑的div,因为在这种情况下,我无法与页面上的其他功能一起使用.我需要,别无其他. javascript: function Undo() { document.execCommand("undo", false, null); } function Redo() { document.execCommand("redo", false, null); } html:
6 2024-01-17
编程技术问答社区
怎样才能 "撤销 "以编程方式插入文本到一个文本框中的内容?
我有一个文本方面和一个按钮.单击该按钮会导致文本插入文本中心. 是否有一种方法可以允许用户按CTRL/CMD+Z删除文本的插入并将文本方面恢复为先前状态? 解决方案 我认为,最简单的方法是利用浏览器的撤消堆栈而不是捕获事件. 要这样做,您需要为不同的浏览器使用不同的代码.幸运的是,在所有主要浏览器中,只有Firefox具有不同的方法. 在 // http://stackoverflow.com/a/9851769/529024 // Opera 8.0+ var isOpera = (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0; // Firefox 1.0+ var isFirefox = typeof InstallTrigger !== 'undefined'; // Safari 3.0+ "[
2 2024-01-11
编程技术问答社区
动作脚本3 绘图应用程序的撤销和重做功能
有人可以告诉我如何撤消和重做功能吗?因此,这是我当前的动作脚本.我无法弄清楚该怎么做,并且在某些网站中看到了一些示例,该操作脚本始终在站立之下.请显示我可以做这项工作的简单方法. 对不起,语法不好... import flash.display.MovieClip; import flash.events.MouseEvent; var pen_mc:MovieClip; var drawing:Boolean = false; var penSize:uint = 1; var penColor:Number = 0x000000; var shapes:Vector.=new Vector.(); var position:int=0; const MAX_UNDO:int=10; function init():void{ pen_mc = new MovieClip(); stage.addEventListener(Mouse
0 2024-01-09
编程技术问答社区
DbContext丢弃变化而不进行处置
我有一个桌面客户端应用程序,该应用程序使用模态窗口为层次对象设置属性.由于这是一个客户端应用程序,并且对DBContext的访问不是线程的访问,因此我在主表单上使用长期运行的上下文,该上下文将传递给Modal Children. 这些模式窗口使用属性格里德显示实体属性,并且还具有取消按钮.如果修改了任何数据并按下了取消按钮,则更改反映在父级表单中(我无法处理DbContext object). 如果没有调用DbContext.SaveChanges()方法,是否有一种方法可以丢弃任何更改? 更新:实体框架版本4.4. 解决方案 如何将其包装在交易中? using(var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted
6 2024-01-02
编程技术问答社区
OpenGL ES:在像素绘制应用程序中撤消
我目前正在使用一个应用程序,该应用程序允许用户使用OpenGL ES绘制像素化图像,但我不知道如何实现撤消功能. 我该怎么办?我想到为每个像素使用图像并将其添加到数组中.基本上,我如何存储我用作像素的矩形? 解决方案 您可以尝试: NSData *data = [NSData dataWithBytes:vertexBuffer length:vertexCount * sizeof(GL_FLOAT) * 2] ; if (self.vertexBuffers == nil) self.vertexBuffers = [[NSMutableArray alloc] init]; [self.vertexBuffers addObject:data]; save every draw point to a array; if undo 清除旧buffer glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFra
0 2023-12-18
编程技术问答社区
Javascript UndoManager浏览器支持
html5规格提到了一个未漫画家,可用于查询用户编辑的文档的先前状态( http://www.whatwg.org/specs/web-apps/current-work/#undomanager ).有任何浏览器支持这一点吗?浏览器有任何支持吗? 解决方案 您可以通过将它们导航到在您的页面上进行测试在您的页面上(如果存在的话,请使用) : return typeof UndoManager !== 'undefined'; 当前支持它的浏览器受到限制. 无支持:Chrome 6.0,即8,FF 3.6 Browser Score (160) UndoManager Support -------------------------------------- IE8 19 no FF3.6 101 no Chrome 6 142 no
6 2023-12-15
编程技术问答社区
在Python中做撤销操作
首先..对不起,如果我的英语不好.这是我的第三种语言 我正在使用绘制图像并再次保存图像的油漆软件(用于评论提议) 我使用堆和wxpython. 但是我仍然在某些功能上遇到问题. 做出撤消选项的理想方式是什么? 另一个问题..当用户扩展图片时(通过放大图形框架) 线不会扩展.我如何实现. ,每当用户完成一条线并将该新图片分配给框架时,我就通过将临时图像保存到硬盘中,从而消除了所有这些问题. 撤消和重做将通过在这些图像之间切换来完成... 因此,当用户规模映像时,线路也会扩展.但这很糟糕,因为它需要大量的HDD空间(当您绘制1000行时)并且速度很慢,因为它每次用户绘制一条线时都会分配新图像 希望我的想法很清楚 有人有更好的解决方案吗? 解决方案 规范策略是使用 >.您将表示您可以作为命令对象做的事情,并且每个对象都放在堆栈上.然后,应用程序的状态由初始状态以及堆栈所具有的所有内容定义.因此,"撤消"操作只是弹出顶部堆栈项目,然后将其余项目重新申请到初始状态
2 2023-12-15
编程技术问答社区
WPF文本框拦截routedui命令
我正在尝试获得在WPF应用程序中使用的撤消/重做键盘快捷键(我使用命令模式).但是,似乎TextBox控制正在拦截我的"撤消"路由. 禁用此问题的最简单方法是什么,以便我可以在UI树的根部捕获Ctrl+Z?如果可能 以下简要说明了问题:
2 2023-12-13
编程技术问答社区
撤消在WPF M-V-VM里面,它是如何实现的?
在我以前的项目中,我已经在C ++中实现了撤消系统,我知道它是如何工作的.我也知道命令模式. 我将实现C#/WPF桌面应用程序,并希望将我的设计基于M-V-VM模式. 应用程序将: 是一个相对小的项目(1 dev的2-3周估计工作) 具有持久性的简单数据模型(linq to xml) 支持撤消/重做 我想知道,在遵循M-V-VM模式时,是否有人有实现撤消系统的经验.它如何适合它?它如何从InotifyPropertychanged和InotifyCollectionChanged Notification中受益,因此实施模型(业务对象)时需要最少的工作. 我认为撤消系统会集成到视图模型层,因为它是一个UI状态. 任何想法? 解决方案 这是我用于项目的解决方案.该解决方案被证明是完美工作的. 系统正在使用撤消事件对象,每个撤消事件都知道如何撤消和重做. interface IUndoEvent { void Undo();
0 2023-12-13
编程技术问答社区
无法在TextChanged中使用撤销功能
使用textbox.undo();我收到以下错误: 开放时无法撤消或重做. 现在我明白了为什么是这种情况(因为这是一个有效的不可行事件),但是如果用户输入无效字符,我可以通过哪些事件在文本框上执行验证并撤消更改? 解决方案 您不应使用PreviewTextInput和DataObject.Pasting事件,而不是使用撤消和文本变化.在PreviewTextInput事件处理程序中,如果键入文本是无效的字符,则将e.Handled设置为true.在Pasting活动处理程序中,请致电e.CancelCommand()如果粘贴的文本无效. 这是一个仅接受数字0和1的文本框的示例: xaml:
4 2023-12-13
编程技术问答社区
如何在Visual Studio 2008中撤销'从项目中排除'。
可能的重复: undo vs'排除项目'? 我错误地选择了从项目菜单项中排除的,以为我可以选择要排除的内容,但它排除了当前打开的文件. 我没有注意到是什么文件,没有启用撤消的文件. 我该如何撤消此操作?如何检测哪些文件被排除在外?有某种日志文件吗? 解决方案 选择"添加>现有项目...",然后添加您排除的文件
0 2023-11-23
编程技术问答社区
VIM-我怎样才能使撤消使我回到之前的任何模式中?
我经常在正常模式下进行编辑,只是意识到我的变化不是打算的,因此,我撤消了,然后按K/L/J/H继续进行,但同时我已经处于插入模式,所以我有首先摆脱它. 我想在我的.vimrc上插入一个规则,以使我回到我所做的任何更改之前的模式. ie:shift+s(删除行并开始编辑) - >撤消:返回正常模式 奖金:CIW-> Asdahsdasdh->撤消:返回正常模式 ps:我实际上正在使用undo with command+z,默认的macOSX撤消组合. 解决方案 OS X正在捕获 cmd z 键盘事件并在应用程序级别处理撤消,因此的任何映射都将被忽略.但是,您可以覆盖此操作以完成您想要的事情. 首先,将映射添加到您的.vimrc: if has("gui_running") inoremap :undo endif 重新启动麦克维姆以确保.vimrc已重新加载. 要使此功能工作,您还需要告诉麦克维
2 2023-11-19
编程技术问答社区
我如何在vim中重做(即"撤消")?
在vim中,我做了太多撤消.如何撤消这个(那就是,重做)? 解决方案 ctrl + r 其他解决方案 还查看:undolist,该>在撤消历史记录中提供了多个路径.如果您在撤消太多之后意外键入某些内容,这将很有用. 其他解决方案 使用:earlier/:later.重做您只需要做的一切 later 9999999d (假设您最多首先在999999天之前编辑该文件),或者,如果您记住当前撤消状态和需要的差异,请使用Nh,Nm或Nm或Ns数小时,分钟,并且几秒钟. + :later N Ng+和:later Nf用于文件写入.
6 2023-11-19
编程技术问答社区
独立于VIM版本的无函数
我正在使用vim 7.3功能undofile以下方式: if version >= 703 set undofile set undodir=$HOME/.vim/undo set undolevels=1000 set undoreload=10000 endif 我在不同的机器上使用相同的.vimrc和相同的文件(在云存储中),这些机器不支持VIM 7.3,但使用旧的7.2版本,而旧的7.2版本不支持Box的Undoffile.是否有与7.3 Undofile兼容的7.2版本的解决方案? 解决方案 版本检查 由于使用VIM 7.3引入了持久性撤消,因此您的版本检查很好,并且可以防止较旧的VIM中的错误.通常,您会检查该功能本身; :help 'undofile'有此注: {only when compiled with the |+persistent_undo| feature} 因此 :if has('persistent_undo')
8 2023-11-19
编程技术问答社区
如何撤消对VIM中文本块的所有更改?
是否可以从一开始就选择一些带有视觉线的文本并撤消对其进行的所有更改? 解决方案 我实际上是通过撤消所有的所有东西来做到这一点,然后将所有内容重做最后一个修改,然后用倾斜的文本代替块.
6 2023-11-19
编程技术问答社区
我如何在vim中获得细粒度的撤消
我发现vim的撤消太粗糙了.例如.如果我键入这样的内容: a // to go into edit mode to be or not to ve // to exit insert mode 哎呀!我做了一个错字.我想开始撤消,所以我按u,但随后清除了整个行. 有没有一种方法来撤消单词或字符的字符? 解决方案 因此,正如您从其他人所看到的那样 撤消了您的最后一个动作是什么.如果您的最后一个动作是输入插入模式,然后添加一行,然后退出插入模式.但是,这将被撤消,但是,如果您从默认模式点击" x"键,则将删除1个字符,或者在选择文本的视觉模式下,将删除文本.如果您打开撤消,那么您将还原一个字符或选择的文本. ...您应该将其视为一种动作,并且可以在原子上取消或恢复动作 如前所述,如果您想删除上一个单词,那么您应该能够点击ctrl + w并在插入模式下删除上一个单词. 如果您退出插入模式,则可以导航(运动)一个单词,带有" b"的单词,带有"
6 2023-11-19
编程技术问答社区
VIM中如何使用撤消树?
在答案说: vim的撤消/重做系统是无与伦比的.键入某种内容,撤消,键入其他内容,您仍然可以收回您输入的第一件事,因为VIM使用撤消树而不是堆栈.在几乎所有其他程序中,您键入的第一件事的历史在这种情况下都丢失了. 这是我听说的第一个.我如何沿着树回路? 解决方案 另请参见:h undo-redo,其中列出了所有命令及其用法. 有两种方法可以穿越撤消树.一个是"回到过去". g+和g-将按时间顺序或反向音阶中的树中的所有节点遍历所有节点(这可能有点混乱,因为它可以在撤消分支之间任意跳跃,但是如果您做g-足够长的时间'将永远到达您最终需要去的地方). :earlier和:later以7m或1h为例,以时间描述符;同样,这可以任意跳到撤消分支之间. 另一种方法是使用:undo n跳到树中的特定节点,其中n是许多动作. (所有操作,即文本添加,删除,替换,都按照您进行依次编号.)您可以通过:undolist查找撤消树叶子上的动作数量.这将使您轻松地在分支之间跳跃.
6 2023-11-19
编程技术问答社区