2012-11-12 13 views
9

Zaimplementowałem długą metodę onDraw, która rysuje zestaw prostokątów. Prostokąty są za małe i chcę, żeby wyglądały na większe. Ale niestety nie mogę zmienić współrzędnych prostokąta, ponieważ są one przechowywane w bazie danych. Czy istnieje sposób powiększenia obszaru roboczego przy użyciu canvas.scale()?Powiększyć obraz za pomocą funkcji canvas.scale?

+1

"Ale niestety nie mogę zmienić współrzędnych prostokąta, ponieważ są przechowywane w bazie danych" Dlaczego? otrzymujesz współrzędne z DB i mnożysz przez dowolny współczynnik skali, który potrzebujesz przed drawRectangle(). – Simon

+0

Czy mogę w ten sposób zaimplementować funkcję powiększenia? – Ruby

+1

x = getValueFromDatabase(), y = getValueFromDatabase(), x = x * 5; y = y * 5; drawRectangle (x, y). Co jest nie tak z czymś takim? Chodzi mi o to, dlaczego przechowywanie wartości w bazie danych uniemożliwia rysowanie większych prostokątów? Nie rozumiem tego. Oczywiście możesz zmienić współrzędne prostokąta. Możesz zrobić z nich wszystko, co chcesz. – Simon

Odpowiedz

18

Zamierzam poprzedzić tę odpowiedź, mówiąc, że musisz narysować wszystko co 0,0, a następnie przeskalować i ostatecznie przetłumaczyć, aby zachowywała się poprawnie.

Wystarczy wykonać następujące czynności w OnDraw metody:

canvas.save(); 
    canvas.translate(xValue, yValue); 
    canvas.scale(xScale, yScale) 
    /* draw whatever you want scaled at 0,0*/ 
canvas.restore(); 

xScale kurczy się lub rozciąga się w kierunku X, yScale kurczy się lub rozciąga się w kierunku Y.

1.0 jest domyślny dla tych, więc 2,0 rozciągnęłoby go dwukrotnie, a 0,5 zmniejszyłoby go o połowę.

przykład:

canvas.save(); 
    canvas.translate(50, 50); 
    canvas.scale(0.5f, 0.5f); 
    canvas.drawRect(0.0, 0.0, 5.0, 5.0, paint); 
canvas.restore(); 

to wyciągnie prostokąta o długości 5,0 i szerokość 5,0, skalowanie w dół do 2,5 na długość i szerokość, a następnie przenieść do (50, 50).

Wynik zostanie prostokąt narysowany jako jeśli to zrobił:

canvas.drawRect(50.0, 50.0, 52.5, 52.5, paint); 

Mam nadzieję, że to pomoże!

+0

, ale działają inaczej na skalach w urządzeniach o różnej rozdzielczości. – zionpi

+0

nie ma wpływu na skalę, ponieważ mówimy tylko o pikselach. –

+0

Na wypadek, gdyby ktoś przyszedł tutaj, szukając rozwiązania dla sieci (tak jak ja to zrobiłem =). Oto przykład poprawionego kodu: 'context.translate (50, 50); context.scale (0,5, 0,5); context.fillRect (0.0, 0.0, 5.0, 5.0); ' –

Powiązane problemy