2010-10-11 9 views
5

Amacım bir görüntüyü yatay olarak çevirip bir tuval üzerine çizmektir. Şu anda görüntüyü yatay olarak çalıştıran ve çizen canvas.scale (-1,1) kullanıyorum, fakat x ekseninin 150 olduğu ve sonra da değiştirmek zorunda kaldığımdan önce x ekseni değerleri ile vidalar Aynı noktada işlemek için -150'ye.Android canvas.scale (-1,1)

Sorum şu ki, ölçek sonrası x konumunu ayarlamak zorunda kalmadan her iki durumda da x değeri 150 olacak şekilde nasıl yapabilirim? Performansa çarpmadan bunu yapmanın daha etkili bir yolu var mı?

cevap

1

Ben önce hiç böyle kullanmaktan için bitmap'e dönüşümü uygulayarak bu çözdüm:

public void applyMatrix(Matrix matrix) { 
    mBitmap = Bitmap.createBitmap(mBitmap, 0, 0, 
     mBitmap.getWidth(), mBitmap.getHeight(), matrix, true); 
} 
... 
Matrix matrix = new Matrix(); 
matrix.preScale(-1, 1); 
mSprite.applyMatrix(matrix); 
0

canvas.scale(-1, 1)'u tekrar etmeyi denediniz mi? İki negatifti olumlu hale getirdiği için, dönüşümü etkili bir şekilde kaldıracaktır.

8

Bu soru eski biliyorum ama aynı sorun haline çarpmak oldu. Benim durumumda, bir ImageButton'u genişleten bir sınıfa çizerken tuvali çevirmek zorunda kaldım. Neyse ki, bu özel durum için çözüm düşündüğümden daha zarifti. aşağıdaki gibi Basitçe onDraw(Canvas) yöntemini geçersiz:

@Override 
protected void onDraw(final Canvas canvas) { 

    // Scale the canvas, offset by its center. 
    canvas.scale(-1f, 1f, 
     super.getWidth() * 0.5f, super.getHeight() * 0.5f); 

    // Draw the button! 
    super.onDraw(canvas); 
}