2012-01-27 3 views
1

나는 탐험 한 주위의지도를 레이저로 그려야하는 안드로이드 앱을 만들고 있습니다. 이미지를 동적으로 그릴 수있는 가장 좋은 방법


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 

그래서 내가 어디 있었는지의 XY 좌표와 내가 본 장애물 XY이 있습니다 내가 좋아하는 내 모든 데이터와 전자 텍스트 파일이 있습니다. 텍스트 파일에서 데이터를 읽고 list에 해당 데이터를 저장하는 thread이 있습니다.

또 다른 threadlist을 읽고 그 순간까지 list에 넣는 모든 점을 그려야합니다. thread입니다.

내 문제는 내가 독문 thread이 데이터 list에 새 데이터를 입력 할 때마다 모든 것을 다시 읽고 싶지 않다는 것입니다. 비트 맵과 같은 것을 그리고 동적으로 수정하는 방법이 있습니까? 나는 새로운 데이터를 읽을 때마다 비트 맵을 "열"때마다 새로운 점을 추가하고, 비트 맵을 "닫고"화면에 보여줍니다.

무엇 내가 지금 뭐하는 거지하는 내 onDraw() 기능의 모든 목록을 읽고 점에서 점을 그릴 것입니다,하지만 난 170 000 점을 가지고 있고 그 점은 이전 위치에 때마다 때문에 유용한 작업이다, 새로운 점만 있습니다 ...

답변

0

뷰에 비트 맵과 캔버스를 만들고 필요에 따라이 비트 맵을 계속 그릴 수 있습니다. 포인트가 다시 그려지지 않게하려면 포인트를 그리는 스레드는 그려지는 포인트를 목록에서 제거하거나 마지막 포인트의 인덱스를 추적해야합니다. 그것을 그릴 포인트의 현재 목록을 전달 updateBitmap를 호출하는 점을 그립니다

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); 
    } 
} 

스레드 :

여기에 기본을 포함하는 예입니다. 이 포인트는 목록에서 제거되어 나중에 다시 그려지지 않습니다.

관련 문제