2013-02-08 2 views
0

У меня есть андроид приложение, имеющий компоновку, содержащую Listview, который накачивается сAndroid Низкая производительность SurfaceView в Listview

 LayoutInflater inflater = getLayoutInflater(); 
     row = inflater.inflate(R.layout.disc_row, parent, false); 

«R.layout.disc_row» является содержащим SurfaceView рисунок холста. поэтому каждая строка в ListView содержит холст. при прокрутке списка холст остается на своем месте, а другие элементы строки прокручиваются. Я думаю, что это плохое поведение устройства. то же приложение не рисует что-либо на эмуляторе, пока не нажмет на ListItem.

Есть ли лучшая стратегия для рисования внутри ListViews (нет растровых изображений, только некоторые строки), может быть, с помощью Paint? эмулятор sys делает слишком много работы в своей деятельности.

заранее спасибо

прилагается CLASS

public class DrawDiscInListView extends SurfaceView implements 
    SurfaceHolder.Callback { 

private static final String TAG = "DISCONT SurfaceView"; 

public DrawDiscInListView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    // TODO Auto-generated constructor stub 
} 

@Override 
public void surfaceCreated(SurfaceHolder holder) { 
    tryDrawing(holder); 
} 

@Override 
public void surfaceChanged(SurfaceHolder holder, int frmt, int w, int h) { 
    tryDrawing(holder); 
} 

@Override 
public void surfaceDestroyed(SurfaceHolder holder) { 
} 

private void tryDrawing(SurfaceHolder holder) { 
    Log.i(TAG, "Trying to draw..."); 

    Canvas canvas = holder.lockCanvas(); 
    if (canvas == null) { 
     Log.e(TAG, "Cannot draw onto the canvas as it's null"); 
    } else { 
     drawMyStuff(canvas); 
     holder.unlockCanvasAndPost(canvas); 
    } 
} 

private void drawMyStuff(final Canvas canvas) { 
    Random random = new Random(); 
    Log.i(TAG, "Drawing..."); 
    canvas.drawRGB(255, 128, 128); 
} 

}

ответ

2

Я сделал некоторые исследования, я хотел бы поделиться здесь:

Вместо использования SurfaceView я наконец ImageView: Я использовал Canvas для создания растрового изображения, а затем использовал растровое изображение в Listview. Он работает нормально и без потери производительности.

2

Поздний ответ, на случай, если вам или кому-то еще понадобится.

Если вы просто рисуете несколько базовых фигур без анимации или анимации, вы можете просто подклассом просмотреть и переопределить метод onDraw (Canvas).

Он все еще использует холст, чтобы создать фигуру, хотя она занимает меньше памяти, чем создание растрового изображения и использование его в ImageView.

+0

благодарит вас за комментарий. попробует, но я думаю, что битмап прочный. – user1616685

0

У меня был такой же проблема «во время прокрутки списка холста гостит на своем месте, а остальные элементы строки прокручивают», это происходит также с VideoView т.е.

Решением состоит в том, чтобы просто установить Фон SurfaceView - прозрачный, например android:background="#0000"

Надеюсь, это поможет!

Thanks

+0

спасибо, однако он не помог – user1616685

Смежные вопросы