我有一个自定义视图,在其draw calls
中执行了很多onDraw method
:
@Override
public void onDraw(Canvas canvas) {
System.out.println("start drawing");
for(Wall w : wallManager.walls) {
drawWall(w, canvas);
}
for(int[] particle : particleManager.getParticles()) {
drawParticle(particle[0],particle[1], canvas);
}
int x = (int) (Math.sin(angle) * 1000);
int y = (int) (Math.cos(angle) * 1000);
canvas.drawLine(getWidth()/2, getHeight()/2, getWidth()/2+x, getHeight()/2+y, anglePaint);
System.out.println("stop drawing");
}
drawParticle
被召唤至少5000次。
现在,当我按下一个随机按钮时,GUI
感觉真的很迟钝,并且onclick处理程序被调用了很长的延迟。我也收到以下警告:
Skipped 40 frames! The application may be doing too much work on its main thread.
我的第一个想法是自定义视图的onDraw方法太慢,但后来我发现在点击按钮的整个过程中从未调用过onDraw方法。
我的 layout.xml 文件非常简单,如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawer_layout"
android:layout_width="match_parent" android:layout_height="match_parent"
tools:context=".HomeActivity"
android:orientation="vertical">
<TextView android:id="@+id/section_label"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="nothing"/>
<TextView android:id="@+id/step_count"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="nog geen stappen"/>
<Button
android:layout_width="match_parent"
android:id="@+id/start_queueingButton"
android:layout_height="wrap_content"
android:text="Start queueing"/>
<smartps.tudelft.views.MapView
android:id="@+id/map_view"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_gravity="center_horizontal"
/>
</LinearLayout>
但奇怪的是:when I remove the drawParticle calls from the onDraw method, the issue disappears
。
当我在没有调用onDraw的情况下触摸按钮时,Android会重新绘制我的自定义视图吗?
答案 0 :(得分:0)
将除MapView之外的所有视图放在一个单独的容器中解决了问题。我认为涟漪效应(适用于按钮父视图的背景)会导致MapView重绘而不调用onDraw。