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?
Odpowiedz
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!
, ale działają inaczej na skalach w urządzeniach o różnej rozdzielczości. – zionpi
nie ma wpływu na skalę, ponieważ mówimy tylko o pikselach. –
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); ' –
"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
Czy mogę w ten sposób zaimplementować funkcję powiększenia? – Ruby
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