2012-01-27 2 views
1

Я создаю приложение для Android, которое должно нарисовать карту эмбиента, которую я исследовал с помощью laserscans. У меня есть электронный текстовый файл с моими данными, как:Лучший способ рисовать изображение динамически


index x y 
path 0 0 0 
path 1 1 0 
path 2 2 0 

...etc 

obstacle 0 10 10 
obstacle 1 10 22 

..etc 

поэтому у меня есть х координаты, где я был и х препятствий, которые я видел. У меня есть thread, который считывает данные из текстового файла и сохраняет эти данные в list.

Другой thread гласит, что list и привлекает все моменты, которые не помещаются в list до этого момента при чтении thread.

Моя проблема в том, что я не хочу перечитывать все каждый раз, когда считывание thread поместило новые данные в данные list. Есть способ рисовать что-то вроде растрового изображения и модифицировать его динамически? Я имею в виду, что каждый раз, когда я читаю некоторые новые данные, я «открываю» растровое изображение, добавляю к этому новые точки, «закрываю» это растровое изображение и показываю на экране?

, что я делаю сейчас, чтобы прочитать весь список в моей onDraw() функции и рисовать по точкам, но у меня есть точек, и это полезная работа, потому что каждый раз, когда точки находятся в старой позиции, У меня есть только новые точки ...

ответ

0

Вы можете создать растровое изображение и холст в своем представлении и просто продолжить рисовать в это растровое изображение по мере необходимости. Чтобы предотвратить повторное рисование точек, поток, который рисует точки, должен либо удалять точки из списка по мере их рисования, либо отслеживать индекс последней точки.

Вот пример, который содержит основы:

public class myView extends View { 

    Bitmap mBitmap = Bitmap.createBitmap(10, 10, Bitmap.Config.ARGB_8888); 
    Canvas mCanvas = new Canvas(mBitmap); 
    Paint mPaint = new Paint(); 

    public void updateBitmap(List<Point> points) { 
     while (!points.isEmpty()) { 
      int x = points.get(0).x; 
      int y = points.get(0).y; 
      mCanvas.drawPoint(x, y, mPaint); 
      points.remove(0); 
     } 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     canvas.drawBitmap(mBitmap, 0, 0, null); 
    } 
} 

Нити, который рисует точку вызывает updateBitmap, передавая ему текущий список точек для рисования. Затем эти точки удаляются из списка, поэтому позже они не будут нарисованы.

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