有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Android Java:图像视图太多?

我有一个包含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字节版本的位图,但仍然滞后

如果我将ImageView设置为不可见,那么就没有延迟,如果图像重叠,应用程序运行速度很快

我尝试过添加硬件加速和largeheap,但我只看到了一点不同

有人能告诉我应该改变什么吗

编辑:Imageviews是arraylist,view是viewgroup=my frameLayout


共 (1) 个答案

  1. # 1 楼答案

    问题是,你每2毫秒更新50个ImageViews的位置,速度之快令人难以置信,以至于android无法以如此快的速度渲染,并在你的设备上造成延迟

    解决方案:

    增加处理程序的延迟,在单独的线程上计算movexmovey,并更新imageView在主线程中的位置以防止异常