Java 添加到布局时,多个重复视图会导致延迟
我正在创建一个太空游戏,我正在创建一个随机组合的星星小白圈作为背景的一部分。形状是用XML创建的,视图是用Java编程创建的。恒星本质上都是相同的,减去一个随机的大小和位置。如果我将循环更改为仅创建70个或更低的视图,那么整个应用程序在三星Note 2上运行良好,没有任何减速。理想情况下,我希望在整个应用程序中创建几百颗星,没有延迟 stars.javaJava 添加到布局时,多个重复视图会导致延迟,java,android,xml,performance,view,Java,Android,Xml,Performance,View,我正在创建一个太空游戏,我正在创建一个随机组合的星星小白圈作为背景的一部分。形状是用XML创建的,视图是用Java编程创建的。恒星本质上都是相同的,减去一个随机的大小和位置。如果我将循环更改为仅创建70个或更低的视图,那么整个应用程序在三星Note 2上运行良好,没有任何减速。理想情况下,我希望在整个应用程序中创建几百颗星,没有延迟 stars.java public void setup() { RelativeLayout fullLayout = (RelativeLayout)a
public void setup() {
RelativeLayout fullLayout = (RelativeLayout)activity.findViewById(R.id.fullLayout);
//Creates a new "star" and adds it to my main layout as part of the background
for(int i = 0; i < 750; i++){
Random r = new Random();
int width = r.nextInt(1000);//Using the dynamic screen size but for demonstration I changed the width & height to a hard coded integer.
int height = r.nextInt(500);
int starSize = r.nextInt(5) + 3;
View star = new View(activity);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(starSize, starSize);
star.setBackgroundResource(R.drawable.star);
star.setLayoutParams(params);
star.setX(width);
star.setY(height);
fullLayout.addView(star);
}
}
star.xml
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- view background color -->
<solid
android:color="#FFFFFF" >
</solid>
<!-- view border color and width -->
<stroke
android:width="2dp"
android:color="#88FFFFFF" >
</stroke>
<!-- Here is the corner radius -->
<corners
android:radius="90dp" >
</corners>
</shape>
如果你创建了大量的小部件/视图,那么Android会变得非常慢,因为它必须尝试并计算每个小部件/视图应该在哪里,然后它还必须单独绘制每个小部件/视图 对于这种情况,您应该创建一个自定义视图,然后一次性绘制所有星星 有关如何执行此操作的更多信息,请参见此处: