问题标签 [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.

0 投票
1 回答
3895 浏览

android - 在 onDraw() 中调用 invalidate() 是一种好的编程习惯吗?

  1. invalidate()调用inside是一种好的编程习惯onDraw()吗?

据我了解,invalidate()内部调用onDraw()很昂贵,如果画布没有变化,则不需要。

  1. invalidate()相当于异步版本onDraw()的?

根据我的理解,它们是等价的。如果我错了,请纠正我。谢谢你。

0 投票
2 回答
1771 浏览

android - 在Android中计算屏幕上两点之间的路径

起初问题对我来说似乎很简单,但现在我被卡住了。

场景 我想在我创建的特定路径上移动屏幕上的图像。移动这个图像是在一个线程上进行的,比如:

对于我要移动的图像,我有一个列表,其中包含它应该去的要点。每个坐标有:

例如,我的第一个点是 -5;-30,我需要达到第二个点 50.50。在 updateImageCoordinates() 上计算绘制图像的下一个坐标。我的问题是我不知道如何计算 speedX 和 speedY 以便我从 A 点直线到达 B 点。基本上对于 updateImageCoorindates() 的每次执行,我需要做:

基于知道坐标,我不知道如何计算 x 和 Y 方向的速度。

我附上一张图片作为示例。任何帮助表示赞赏。 在此处输入图像描述

0 投票
1 回答
856 浏览

android - (Android)在视图类之外绘制图像(画布访问?)

我想创建一个包含 View 覆盖类的库(例如:MyView 扩展 View),并希望创建一个方法“Draw(String FileName)”。

所以我最终想要做的是简单地导入这个库并调用这个“Draw(String FileName)”方法来从其他活动中绘制图像。

我自己尝试过,但是在访问 onDraw() 方法实际具有的主 Canvas 时遇到了一些问题。

如果我只在 onDraw() 方法函数中绘制每个图像会很容易,但我不知道如何从类外部放置东西。

对这个结构有什么想法吗?

0 投票
1 回答
623 浏览

android - 自定义视图的可绘制区域覆盖其他字段

我有一个类似于垂直进度条的自定义视图。它只是一个自定义视图,在画布上绘制以从下到上填充完成百分比。在我的 xml 中,我在自定义控件上方有文本,在自定义控件下方有文本(其中有两个,一个在左边,一个在右边,这是右边):

在我的自定义视图中,我以我能想到的各种方式检查高度,但我总是得到一个一直到屏幕底部的高度

到目前为止,我已经尝试反转布局中的视图,因此顶部文本是第一个(顶部对齐),底部文本是第二个(底部对齐),自定义控件是最后一个(layout_above 底部文本),两者都有 match_parent和wrap_content,无济于事。我尝试更改为线性布局,但仍然没有更好的结果。

在代码中显示的情况下,显示了顶部文本,但底部文本消失了。当我更改顺序以使自定义视图位于底部文本之上的 layout_a 时,它只是将绘图区域向上移动,因此底部文本可见,但覆盖了顶部文本。请注意,当我说底部的文字不见了时,我的意思是不见了,而不仅仅是被掩盖了。我的最终测试是在布局中将 layout_height 硬编码为“350dp”。

在所有情况下,我在这个特定设备上总是得到 489 的高度,即使高度是硬编码的。我无法弄清楚我需要做什么才能将屏幕的中间部分作为我可以绘制的东西而不要管其余部分。是否假定自定义视图是布局中的最后一件事?我可以让它工作的唯一方法是更改​​顺序,使自定义视图位于布局中的最后一个,以便自定义区域的底部位于底部文本的顶部,仍然显示底部文本,然后手动添加大约 150 到顶部(即不要在提供给 onDraw() 的画布上写入零),因此它不会覆盖顶部文本。幸运的是,我正在绘制的图形是半透明的,所以我可以看到文本是被覆盖还是刚刚消失。

有没有人有更多关于这应该如何工作的信息?我是否设法解释我所做的事情比实际问题更令人困惑?

谢谢,gb

0 投票
1 回答
3575 浏览

android - Android:SurfaceView 忽略 postInvalidate()?

这是我第一次使用它,所以我不确定它是否是我的代码中的错误,或者我正在尝试做一些不允许的事情。

目前,我有一个 DrawThread() 在 run 方法中执行此操作。

在这个绘图线程(非 UI 线程)中,我的 onDraw() 方法将画布传递给另一个名为 drawScoreboard() 的方法。我希望这个方法在显示记分牌的每一行之间有一个短暂的延迟,所以我添加了一个 postInvalidateDelay(x) 希望它会再次触发 onDraw()。

代码正确执行并且 postInvalidateDelayed() 被调用,但我对为什么 onDraw() 没有被调用感到困惑。为了让它工作,我需要做任何标志或初始化吗?

欢迎任何建议或理论。谢谢!

0 投票
2 回答
720 浏览

android - 为 android 创建自定义小部件

我正在尝试创建一个旋转的 imageView。看着这个(http://stackoverflow.com/questions/1930963/rotating-a-view-in-android)我知道我必须覆盖onDraw。

但是当我创建自己的派生 TextView 类时,如何在我的 xml 布局中使用它?

0 投票
1 回答
2642 浏览

android - OnDraw() 方法没有被调用

所以,我的查询是当我单击按钮时,以 (x,y) 的形式向我显示对象在视图中的确切位置,但我试图将 x,y 连同上下文一起传递给视图,所以在那个 x,y 我需要放置一个对象并重复这个过程直到我结束。

所以 Control 正在移动到视图,但问题是 OnDraw() 方法未能被调用,该方法负责在指定的 x,y 中绘制对象。

0 投票
3 回答
9206 浏览

android - Android SurfaceView 不显示 onDraw

为了简单起见,我在 SurfaceView 上绘制一个整数,每次绘制都会增加 1。正如我在 System.out 上看到的那样,实际增加了。屏幕上的文本保持在“0”。谁能告诉我我做错了什么?

SurfaceViewTest.java

状态视图.java

主要的.xml

0 投票
1 回答
1353 浏览

android - Android WebView 中的 Flash - 分层问题

我正在尝试在包含 flash 的 android WebView 中使用交互式按钮。作为测试,我设置了一个 HTML 以使用设置的 x/y 大小快速加载。

}

我设置了一个测试图像,它的一半覆盖在闪光灯上,一半覆盖在未使用的画布上。一旦加载,flash 将加载到画布上,只留下 HTML 上的部分。

屏幕截图链接

这个问题的答案表明 adobe 的 flash 播放器在 webview 内创建了一个表面视图。我认为这是分层问题的原因,但我不知道如何克服它。

有谁知道如何覆盖这个?该按钮还必须将关键事件发送到闪光灯(就像您按下屏幕上的按钮,然后按 A 键发送到闪光灯)。如果您也知道如何执行此操作,那将非常有帮助

0 投票
3 回答
21450 浏览

android - Android 多个 SurfaceViews

我正在尝试在一个屏幕上使用 3 个 SurfaceView,一个在上半部分(BoardView),一个在下半部分(StatusView),最后一个作为上半部分上方的额外层(TileView)(参见 main.xml) .

我创建了一个 MySurfaceView 类,它由 BoardView、StatusView 和 TileView 扩展。

我有很多问题。

让我先给出代码。

主.xml:

MainActivity.java:

MySurfaceView.java

这三个类扩展了 MySurfaceView:

BoardView.java

状态视图.java

TileView.java

现在我的问题是什么?

首先,正如您在 MySurfaceView 中看到的那样,我得到了这个:

当我只使用 onDraw(c) 时,只有 BoardView 被绘制,StatusView 不被绘制,但 StatusView 的 onDraw 中的 tmp 增量正在执行。当我只使用 postInvalidate() 时,同样的故事,但只有 StatusView 被绘制,BoardView 不会。所以这就是我使用这两种方法的原因,并且两个视图都被绘制了。

然后是 TileView,System.out(2) 显示在 logcat 中,但视图没有被绘制。它是一个黑色方块而不是红色方块,我要求它在 onDraw 方法中。

当我关闭屏幕然后再打开时,TileView 确实被绘制,并且显示了 tmp 增量。

谁能帮我?

为了清楚起见,我根据教程创建了这个。