2014-06-06 71 views
0

我有使用此代碼含有相同的位圖50個imageviews一個ArrayList:Android Java:太多的圖像?

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字節版本的位圖,但它仍然滯後。

如果我將圖像視圖設置爲不可見,則不存在延遲,並且圖像重疊並且應用程序運行速度很快。

我已經嘗試添加硬件加速和largeheap,但我只看到一個細微的差異。

任何人都可以讓我知道我應該改變什麼嗎?

編輯:Imageviews是一個ArrayList,並查看是一個ViewGroup =我的FrameLayout

+0

嘗試使用帶有Item的ListVew包含單個ImageView。 –

+0

爲什麼計算movex和movey時,你甚至不使用它 –

+0

你能解釋一下代碼Haresh嗎?我用它來動態改變它們的旋轉角度的圖像 – jwhite

回答

0

的問題是要更新的50個ImageViews位置每2毫秒這是令人難以置信的快,機器人有麻煩呈現在這個快的速度並導致設備滯後。

解決方案:

增加處理的延遲,並計算movexmovey一個單獨的線程和更新在主線程中的ImageView的位置,以防止異常。

+0

我試着改變毫秒,但它開始變亂> 25左右,但你是什麼意思在主線程? – jwhite

+0

雖然你絕對正確,但是延遲來自2毫秒更新 – jwhite

+0

@ user3705120並增加更新50就足夠了。 –