2010-10-11 9 views
5

Moim celem jest obrócenie obrazu w poziomie, a następnie narysowanie go na płótnie. Obecnie używam canvas.scale (-1,1), który efektywnie działa i rysuje obraz w poziomie, jednak również wkręca z wartościami osi x, gdzie przed skalą pozycja x wyniosłaby 150 i po tym musiałbym zmienić do -150, aby renderować w tym samym miejscu.Android canvas.scale (-1,1)

Moje pytanie brzmi: jak mogę to zrobić, aby wartość x wynosiła 150 w obu przypadkach bez konieczności zmiany pozycji x po skali? Czy istnieje skuteczniejszy sposób na zrobienie tego bez wpływu na wydajność?

Odpowiedz

1

Naprawiłem to stosując transformację do bitmapy przed kiedykolwiek go używać tak:

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

Czy próbowałeś powtórzyć canvas.scale(-1, 1)? Skutecznie usunie transformację, ponieważ dwa negatywy są pozytywne.

8

Wiem, że to pytanie jest stary, ale zdarzyło mi się wpaść na ten sam problem. W mojej sytuacji musiałem odwrócić płótno podczas rysowania na klasie rozszerzającej ImageButton. Na szczęście rozwiązanie tego konkretnego przypadku było bardziej eleganckie, niż myślałem. Wystarczy zastąpić metodę onDraw(Canvas) w następujący sposób:

@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); 
} 
Powiązane problemy