我有50个图像视图的arraylist包含使用此代码的相同位图:
for (int i = 0; i < 50; i++) {
ImageView imageView = new ImageView(getApplicationContext());
imageView.setImageResource(R.drawable.pic1);
imageView.setVisibility(ImageView.VISIBLE);
imageView.setScaleType(ScaleType.CENTER);
imageViews.add(imageView);
view.addView(imageView);
}
除了移动每个代码时,此代码不会导致延迟:
final Runnable bulletData2 = new Runnable(){
public void run(){
if(i=0;i<=50;i++){
movex = Math.cos((imageViews.get(i).getRotation() - 90) * Math.PI / 180) * 32;
movey = Math.sin((imageViews.get(i).getRotation() - 90)* Math.PI / 180) * 32;
imageViews.get(i).setX((float) (imageViews.get(i).getX() + movex));
imageViews.get(i).setY((float) (imageViews.get(i).getY() + movey));
}
handler2.postDelayed(this, 2);
}
};
位图只有6kB,我尝试了一个600字节版本的位图,它仍然滞后。
如果我将图像视图设置为不可见,则没有延迟,如果图像重叠且应用程序运行速度很快。
我尝试过添加硬件加速和bigheap,但我只看到一点点差异。
有人能让我知道我应该改变什么吗?
编辑:Imageviews是一个arraylist,view是viewgroup = my frameLayout
答案 0 :(得分:0)
问题在于你每2毫秒更新一次50个ImageViews位置,这非常快,以至于android在快速渲染时出现问题并导致设备滞后。
<强>溶液强>
增加处理程序的延迟并在单独的线程上计算movex
和movey
并更新imageView在主线程中的位置以防止异常。