Poszukaj sobie o Transformation Matrix (macierz przekrztałceń) w grafice. To z teorii. W praktyce:
canvas.save(); //zapisuje starą macierz przekształceń
canvas.translate( pozycja_x, pozycja_y ); //przesuwa obrazek o zadany wektor
canvas.scale( skala_x, skala_y ); //skaluje obrazek
//teraz wszystko, co rysujemy będzie poddane przekształceniom: najpierw skalowanie, potem przesuniecie -
//- w takiej kolejności, przekształcenia rozpatrywane są od końca!! Zwróć uwagę, że inaczej skaluje się obrazek
//będący w środku układu współrzędnych, a inaczej gdzieś poza nim - w drugim wypadku zostanie również przesunięty.
drawable.draw( canvas );
canvas.restore(); //przywraca stara macierz
Jezeli chodzi o macierze, to powyzszy kod zapewne wygeneruje troche smieci dla GC (stare macierze) i mozna by go zoptymalizowac uzywajac setMatrix( matrix ) i samemu dbajac o recykling 😉.