gpt4 book ai didi

java - 移动 Android View 并防止 onDraw 被反复调用

转载 作者:搜寻专家 更新时间:2023-11-01 09:08:17 26 4
gpt4 key购买 nike

我正在扩展 View 类,我称之为 MyView。 (我已经添加了一些属性,这些属性基本上说明了在对象上绘制的内容,并进行了处理)

我每隔几毫秒就移动一次此类的对象,效果很好。我正在使用 this.layout(left, top, right, bottom); 来移动 MyView。但似乎每次移动 View 时,都会重新绘制(调用 onDraw)。这是必要的吗? MyView 的内容在移动时不会改变。事实上,内容永远不会改变 - 它以一种方式创建,四处移动,然后被销毁。

我正在使用 onDraw 因为每次创建它时我都希望它在上面绘制一些文本或一些数字。我曾经扩展 ImageView 并使用 setImageResource 但我意识到我想要的不仅仅是不同的图像,并为这个对象可以做的各种文本和数字内容创建图像感觉不对。

同样重要的是我的对象可以接收 onTouch 事件,这在今天工作正常。

我的 onDraw 方法目前包含:(这会改变,当我让它不再重绘时)

@Override
public void onDraw(Canvas canvas) {
Paint p = new Paint();
p.setARGB(255, 0, 255, 255);
canvas.drawRect(0, 0, 32, 32, p);
}

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

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

编辑:如果 View 无法实现,是否有我可以使用的替代方案?

最佳答案

But it seems like every time the view is moved, it is redrawn (onDraw is called). Is this necessary?

是的。

View 对象在移动时总是会调用 onDraw,因为必须调用 invalidate 方法,这样文本或您在该对象中绘制的任何内容都将在新的对象中绘制位置。

Can I have an object that is drawn dynamically when created, have the possibility to receive touch events

是的,根据你想要实现的目标,你可以覆盖方法onTouchEvent在扩展 View 或实现 TouchListener 的类上给你的对象

注意:不建议绘制那么多 View 对象(100+)我记得一些 Google 人员提到过这一点,我会在找到它后立即使用链接进行编辑。

关于java - 移动 Android View 并防止 onDraw 被反复调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10251124/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com