2013-09-03 7 views
0

나는 손가락 움직임을 사용하여 안드로이드 캔버스에서 닫힌 경로를 그려야합니다. 여기에 대한 내 코드는안드로이드에서 여러 경로 그리기

switch (event.getAction()) 
      { 
       case MotionEvent.ACTION_DOWN: 
        startPoint = new PointF(event.getX(), event.getY()); 
        endPoint = new PointF(); 
        hotSpot = new HotSpots(); 
        endPoint.x = event.getX(); 
        endPoint.y = event.getY(); 
        wallpath = new Path(); 
        wallpath.moveTo(endPoint.x,endPoint.y); 
        break; 
       case MotionEvent.ACTION_MOVE: 
        PointF point = new PointF(event.getX(),event.getY()); 
        endPoint.x = event.getX(); 
        endPoint.y = event.getY(); 
       invalidate(); 
        break; 
       case MotionEvent.ACTION_UP: 

        endPoint.x = startPoint.x;//event.getX(); 
        isFinished = true;      
        break; 
       default: 
        break; 
      } 

    @Override 
    protected void onDraw(Canvas canvas) 
    { 
     wallpath.lineTo(endPoint.x, endPoint.y); 
      canvas.drawPath(wallpath, paint); 

     if(isFinished) 
     { 
      wallpath.lineTo(endPoint.x, endPoint.y); 
      canvas.drawPath(wallpath, paint); 
     } 
    } 

언제나 나는 새로운 경로를 만들고 있습니다. 그러나 새로운 경로가 그려지면 이전 경로가 지워집니다. 캔버스에 여러 경로를 각각 다른 경로로 채우려면 어떻게해야합니까?

답변

2

ACTION_DOWN이 트리거 이벤트 인 경우 wallpath = new Path() 문으로 wallpath를 재설정하고 이전 값을 버립니다. 이 새로운 경로는 캔버스를 다시 그려야 할 때마다 호출되는 onDraw 메서드에서 그려지는 유일한 것입니다.

경로 목록 작성, ACTION_DOWN이 트리거 이벤트 일 때 목록에 새 경로 추가, onDraw 메소드에서 모든 경로를 목록에 표시하는 것을 고려하십시오.

세부 사항 : ACTION_DOWN의 경우

pathList = new ArrayList<Path>; 

라인 추가 : 다른 곳에서 코드의

이 추가 ACTION_MOVE의 경우

wallpath = new Path(); 
pathList.add(wallpath); // <-- Add this line. 

:

endPoint.x = event.getX(); 
endPoint.y = event.getY(); 
wallpath.lineTo(endPoint.x, endPoint.y); // <-- Add this line. 

마지막으로, r 다음 코드를 사용하여 onDraw 메서드의 코드를 배치하십시오.

for (Path path : pathList) { 
    canvas.drawPath(path, paint); 
} 

조건부를 제거하면 필요 없습니다.

관련 문제