2013-01-21 5 views
3

onDraw()에서 캔버스에 비트 맵을 그리는 사용자 정의보기가 있습니다. 그림이 작동 중입니다. 코드 스 니펫을 살펴보십시오.Android : Canvas not scaling

@Override 
protected void onDraw(Canvas canvas) { 
    // TODO Auto-generated method stub 
    super.onDraw(canvas); 
    canvas.save(); 

    if(appInitialized) { 

     hsSide.draw(canvas); 
     scaleA.draw(canvas); 
     scaleB.draw(canvas); 

    } 
    canvas.scale(mScaleFactor, mScaleFactor, pivotX, pivotY); 
    canvas.restore(); 
} 

화면에 핀치 확대/축소가 적용될 때 캔버스의 크기를 조절하는 ScaleGestureListener를 구현했습니다. 문제는 캔버스가 크기 조정이 아니라는 것입니다. if(appInitialized) { 앞에 canvas.scale(mScaleFactor, mScaleFactor, pivotX, pivotY);을 입력하면 캔버스의 크기가 조정되지만 그 후에는 그림이 다시 그려집니다. hsSide.draw(canvas);은 크기 조정되지 않습니다. 그것의 정상적인 규모로 그려집니다. 다음은 연신 방법 :

hsDide.draw :

@Override 
public void draw(Canvas canvas) { 
    // TODO Auto-generated method stub 
    canvas.drawBitmap(mBitmap, canvas.getWidth()/2 - mBitmap.getWidth()/2, 0, null); 
} 

scaleA.draw :

@Override 
public void draw(Canvas canvas) { 
    // TODO Auto-generated method stub 
    canvas.drawBitmap(mBitmap, canvas.getWidth()/2 - mBitmap.getWidth()/2, canvas.getHeight()/2 - mBitmap.getHeight()/2, null); 
} 

scaleB.draw :

@Override 
public void draw(Canvas canvas) { 
    // TODO Auto-generated method stub 

    canvas.save(); 
    mMatrix.setRotate(currentAngle, canvas.getWidth()/2, canvas.getHeight()/2); 
    canvas.setMatrix(mMatrix); 
    canvas.drawBitmap(mBitmap, canvas.getWidth()/2 - mBitmap.getWidth()/2, canvas.getHeight()/2 - mBitmap.getHeight()/2, null); 
    canvas.restore(); 
} 
,617,

내가 잘못 가고있는 어떤 생각 ... ???

답변

4

코드를 실제로 살펴보면 캔버스를 그리기 전에 크기를 조절 한 다음 다시 그려야합니다. 따라서 캔버스 크기를 다음과 같이 이동하십시오.

@Override 
protected void onDraw(Canvas canvas) { 
    // TODO Auto-generated method stub 
    super.onDraw(canvas); 
    canvas.save(); 

    canvas.scale(mScaleFactor, mScaleFactor, pivotX, pivotY); // MOVED HERE. 

    if(appInitialized) { 

     hsSide.draw(canvas); 
     scaleA.draw(canvas); 
     scaleB.draw(canvas); 

    } 

    canvas.restore(); 
} 

그러면 캔버스 크기에 따라 그리기 크기가 결정됩니다. 따라서 캔버스의 크기를 조절할 때 전체 크기로 그리는 중일 때 다시 원래 크기로 크기를 조절할 수 있습니다. 따라서 어떤 효과도 얻지 못합니다.

캔버스 크기를 BEFORE 크기 조정 한 다음 그리기 방법으로 전달해야합니다. 그런 다음 크기를 사용하여 캔버스에 그립니다.