Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 移动Android视图并防止onDraw被反复调用_Java_Android_View - Fatal编程技术网

Java 移动Android视图并防止onDraw被反复调用

Java 移动Android视图并防止onDraw被反复调用,java,android,view,Java,Android,View,我正在将视图-类扩展到我所称的MyView。(我添加了一些属性,基本上说明了在对象上绘制的内容,以及如何处理这些内容) 我每隔几毫秒移动这个类的一个对象,效果很好。我正在使用this.layout(左、上、右、下)以移动MyView。但似乎每次移动视图时,都会重新绘制(称为onDraw)。这有必要吗?MyView的内容在移动时不会更改。事实上,内容永远不会改变——它以一种方式创建,四处移动,然后被销毁 我使用的是onDraw,因为每次创建它时,我都希望它在上面画一些文本或数字。我曾经扩展过Ima

我正在将
视图
-类扩展到我所称的
MyView
。(我添加了一些属性,基本上说明了在对象上绘制的内容,以及如何处理这些内容)

我每隔几毫秒移动这个类的一个对象,效果很好。我正在使用
this.layout(左、上、右、下)
以移动MyView。但似乎每次移动视图时,都会重新绘制(称为onDraw)。这有必要吗?
MyView
的内容在移动时不会更改。事实上,内容永远不会改变——它以一种方式创建,四处移动,然后被销毁

我使用的是
onDraw
,因为每次创建它时,我都希望它在上面画一些文本或数字。我曾经扩展过
ImageView
并使用
setImageResource
,但我意识到我想要的不仅仅是不同的图像,并且为所有类型的文本和数字内容创建图像,这个对象可能感觉不对劲

同样重要的是,我的对象可以接收到这样的事件,这在今天运行良好

我的onDraw方法目前包含:(当我让它不一直重新绘制时,这将改变)

所以问题是:我是否可以让一个对象在创建时动态绘制,有可能接收触摸事件(我可以用另一种方法解决,所以它不是很重要),并且在不重新绘制的情况下移动它(最重要)

原因是:我将有几个这个类的对象(可能是100+),我相信通过一直重新绘制这些对象,应用程序会变慢

编辑: 如果视图不可能,是否有我可以使用的替代方案?

但似乎每次移动视图时,都会重新绘制(称为onDraw)。这有必要吗

是。

视图
对象在必须调用其moved-since-invalidate方法时,将始终调用
onDraw
,以便在该对象中绘制的文本或任何内容将绘制在新位置

我可以拥有一个创建时动态绘制的对象吗 接收触摸事件的可能性

是的,根据您想要实现的目标,您可以覆盖类上扩展
视图的方法,或者对对象实现


注意:不建议绘制太多的视图对象(100+),我记得谷歌的一些人提到了这一点,我会在找到它后立即用链接编辑它。

如果视图移动,onDraw几乎是一件确定的事情——尽管在Android源代码中很难找到发生这种情况的地方(对任何人来说都是道具)。 相信我,我感觉到你了——我之所以发帖,是因为使用LayoutTransition时也会出现同样的问题


根据文档,您可以使用视图属性动画(可能是ViewPropertyAnimator;我自己也在学习)来移动视图。您可以收听该动画的结尾,然后通过运行布局“固定”视图的位置。此外,我们应该通过在视图上放置一个新的LayoutParams来触发布局,而不是直接调用
layout

触摸并不是目前最难的部分,正如我所写的,这在今天起作用。有没有其他方法可以替代我使用的视图,它可以解决“在不重新绘制的情况下移动它”的问题,但仍然有动态内容?如果你能找到它,这个链接会很有趣:)我的朋友告诉我,在Reto Meier的视频中,但是我找不到,他们太多了:这里是他们视频的链接:谢谢。我看看能在那里找到什么。我已经接受了你的回答,不过如果你能提出任何替代方案,我将不胜感激。虽然我认为抽签的问题不会很大。
@Override
public void onDraw(Canvas canvas) {
    Paint p = new Paint();
    p.setARGB(255, 0, 255, 255);
    canvas.drawRect(0, 0, 32, 32, p);
}