问题标签 [ondraw]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 如何在修改后更新 Android 视图?
我的视图中有一些方法可以修改调用时绘制的一些形状。在 Java 中,为了确保组件已更新,我会调用repaint()
. 有什么东西可以确保我的视图正确更新吗?
我在某处读到,调用invalidate()
该onDraw()
方法可以使事情保持最新,因此我不需要repaint()
在我的方法中使用类似的东西来修改绘制的形状。
这是正确的,还是我还有其他事情要做?
编辑
要添加一个示例,我在视图中调用的方法是:
android - Android等待UI线程无效
我在绘画应用程序中重绘视图时遇到问题。当触摸结束时,我调用 touch_up() 来创建路径,调用 invalidate() 来绘制它,并调用 storeView() 来将当前视图压入堆栈。然而,视图根本没有重绘(直到下一次触摸,给它一个抽搐的效果)。如果我删除对 storeView() 的调用,它会立即重绘。
我从这里了解到问题是 invalidate() 不一定会立即发生,我认为我需要创建一个新线程或处理程序来等待它。尽管阅读了开发页面,但我并不完全理解如何实现它。
这真的是我需要做的吗?如何让 storeView() 等到视图被重绘?我已经为此奋斗了一段时间,答案会让我开心。谢谢!
这是我目前所做的。
行动:
润色:
商店视图:
android - opengl-es onTouchEvents 问题还是draw 问题?
我刚刚开始在我的应用程序中使用 opengl,而且我很好 =) 但我最近遇到了障碍,因为我一直在尝试找出用户输入的方法。我决定从一个简单的过程开始,在您触摸屏幕的位置在屏幕上绘制一个正方形。不幸的是,该应用程序似乎没有注册输入。
这是我的代码:
该应用程序打开此活动>>
这会初始化一个全屏 SurfaceView。
接下来是渲染器
如您所见,有一个 onTouchEvent 获取事件的坐标并将它们设置为顶部的浮点数。然后 draw 方法使用这些坐标来设置正方形的位置。我不认为这里的 draw 方法更新到足以重新绘制正方形。如何设置draw方法来更新正方形onTouch?除了尝试将正方形设置为从 onTouch 方法内部绘制外,我还将其留空,例如:
这两个都返回相同的结果=(所以我做 onTouchEvent 错了吗?还是我必须强制 draw 方法以某种方式更新?我将如何正确实现呢?
感谢您的时间
编辑:
通过将方法移至 Practice 类,设法获取注册 onTouchEvent 的代码。
编辑:进行了更多改进,代码现在在一定程度上可以正常工作,但不是在所需位置重新绘制正方形,而是得到一个空白的清除屏幕。
这里是编辑练习
并编辑了渲染器类
有任何想法吗?这是方码
android - Android在绘图应用中实现撤消堆栈
我开始使用 Android SDK 中的示例手指画应用程序来熟悉图形。最近我一直在尝试实现撤消/重做,但我尝试过的每一种方式都遇到了障碍。我找到了一些关于这个的线程,但没有一个能让我解决这些问题。这是我的主要 2 次试验:
策略一:
保存一堆路径(或画布)并在撤消时清除屏幕并重绘除最后一个路径之外的每个路径(或恢复最近的画布)。
这里的问题可能很简单,但我无法让视图重绘任何东西。如何绘制保存的路径(或恢复保存的画布)?
策略二:
每次触摸后使用 getDrawingCache() 保存一组位图。在撤消时,将最后一个位图放回去。
保存必须通过可运行的 post() 运行,因此它在 onDraw() 完成后执行(post 在 invalidate() 之后将其添加到系统消息行)。问题是当从可运行的 getDrawingCache() 运行时,总是返回绘画的初始版本,就像它在第一次之后看不到任何变化一样。
为什么从可运行对象调用 getDrawingCache() 时看不到视图的当前状态?
我已经和这个斗争了一段时间。谢谢。
android - onDraw 方法在 android-custom-view 类的子类中如何工作?
我面临在我的 android 自定义视图类的子类中绘制矩形的问题。每次超类 onDraw 方法都有效。但子类 onDraw 方法从未执行。超类将绘制一个矩形,子类将在超类绘制的矩形内绘制 4 个矩形。我无法解决这个问题。请帮助我。
这是我的示例代码。
超类:
子类:
XML
请帮助我解决这个问题。希望我能尽快得到答复。
android - android canvas - 我可以有多种绘制方法吗?
我制作了自己的画布类,它扩展了一个 imageView。我的 onDraw() 方法绘制出用户的 gps 位置,每次用户移动时我都会调用这个 onDraw 方法。我的问题是我还想画出只需要画一次的gps轨迹(用户移动时不需要更新)。我想知道是否有可能有超过 1 个 onDraw 方法,或者有什么方法可以分离 1)用户位置和 2)gps 轨迹?
我的原因是我不想在每次用户 gps 位置更改时重新绘制 gps 路线来浪费内存。这是一种浪费。
android - 从 onDraw() 绘制到创建的位图
我正在尝试绘制位图,以便可以将自定义视图放在 imageView 中。onDraw 方法中的代码是:
我的问题是,如果我尝试以这种方式使用位图,我只会得到黑屏。我知道如果我不尝试绘制位图,我的其余代码会按照显示的方式工作。
如果我注释掉该行
然后一切正常,所以这是问题,但我不知道为什么。
我哪里错了?
android - Android 如何在 Canvas 的 onDraw 方法中创建 onClick 事件
我四处寻找,仍然找不到一个好的答案。我已经创建了自己的类来扩展 imageView,并且在 onDraw() 方法中我使用画布在我的图像上绘制圆圈。
我现在想做的是在不同位置的图像上绘制一个按钮并为其设置一个 onClick 事件,因此当用户按下该按钮时,它将打开一个新活动。
这是我到目前为止所拥有的......它在正确的位置绘制按钮,除了我的 onClick 方法没有触发
android - Android:画布翻译后点击/触摸事件不起作用
我有一个包含多个 ImageView 的 FrameLayout。在主要活动中,我记录了触摸事件,以便用手指(拖动)移动我的 FrameLayout 和里面的图像。
为此,我在 framelayout 的 onDraw 内调用 canvas.translate(x,y),该框架由活动触摸事件处理程序中的 invalidate() 调用。
一切都像一个魅力,除了翻译后,我无法点击我的 ImageView。其实每张图片的点击监听器还是在翻译前的原处。
我已经读过我应该在翻译后手动更新每个图像的布局,但是该怎么做呢?如果我用平移值更改边距,图像会进一步增加两倍......
我真的很感激任何帮助。
干杯。
这是我在 onDraw() 方法中翻译画布的 frameLayout(在我的主 Activity 中将 ImageView 添加到该 FrameLayout)。
android - 我是否需要使用无效呼叫,如果需要,在哪里?
我有一个显示视图的活动,在视图中有一个正在绘制的画布,然后我有一个 ontouch 功能,它应该允许画布被拖动/缩放。但是,在调试时,它似乎可以正常工作,只是画布没有移动。我认为我需要调用无效,对吗?如果是这样,我应该在哪里称呼它?
感谢你给与我的帮助。
Touch.java
和视图 GridView.java