J'ai une vue personnalisée qui dessine quelques bitmaps sur le canevas dans onDraw(). Le dessin fonctionne. Regardez l'extrait de code :
@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();
}
J'ai implémenté un ScaleGestureListener qui met à l'échelle le canevas lorsque le zoom par pincement est appliqué à l'écran. Le problème est que le canevas n'est pas mis à l'échelle. Si je mets canvas.scale(mScaleFactor, mScaleFactor, pivotX, pivotY);
antes de if(appInitialized) {
il met à l'échelle le canevas mais après cela le dessin, c'est à dire hsSide.draw(canvas);
n'est pas à l'échelle. Il dessine à son échelle normale. Voici les méthodes de dessin :
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();
}
Une idée de l'endroit où je me trompe... ? ???