Nowe wymiary, ścieżki w Androidzie – DSP#14

Dzisiaj skupimy się na tym, jak rysować niestandardowe elementy w klasie View. Tzn, będziemy rysowali standardowe (póki co), ale w niestandardowy sposób, a konkretnie korzystając ze ścieżek. Zapraszam!

Ścieżki w Amdroidzie, czyli obiekty typu Path są tworzone ze zbioru kolejnych punktów. Na szczęście nie musimy ich kolejno wpisywać, możemy też użyć metod typu moveTo (przesunięcie), lineTo (narysowanie linii od miejsca gdzie się znajdujemy do podanych punktów), czy arcTo(narysowanie łuków), close (prowadzi do punktu gdzie zaczęliśmy) oraz podobnych. Dlatego też na początek skupmy się na nadaniu właściwych lokalizacji w naszym kalendarzu. Efekt wygląda tak:

Nowe wymiary, ścieżki w Androidzie - DSP#14

Z kolei kodzik potrzebny do narysowania, w ten sposób:

Jak widać zaczyna to już powoli przypominać kształtem kalendarz. A co się tu dzieje? W metodzie onDraw() na płótnie zostaje wywołana metoda drawPath(), która oznacza rysowanie ścieżki między punktami. Za te ścieżki odpowiadają metody make, w których po kolei dokłada się do nich element. Jak widać ścieżka dla tła różni od ścieżki do obrysowywania tylko tym, że została zamknięta, dzięki temu tło będzie wypełnione i obramowane z trzech stron, z kolei do góry będzie znajdował się pasek. Dziwić mogą te wartości +1 i mówiąc szczerze, mnie też dziwią. Powstała przy rysowaniu mała niedokładność (być może wynikająca z Paint.STROKE), która sprawiała że obrysowanie wystawało o jeden piksel w prawo. Poprawiłem więc szerokość paska aby się dopasował. Ustawiłem nawet wymuszenie układu ekranu z prawej do lewej, żeby sprawdzić jak to się zachowa, ale wyglądało w porządku. W związku z czym zostawiam to przesunięcie o jeden piksel, ponieważ usuwa ono wizualny artefakt. Z pozostałych zmian od poprzedniej wersji, ustawiłem szerokość obramowania na jeden piksel (takie były założenia od początku, po prostu celem testów ta linia była szeroka), a także poprawiłem trochę obliczanie szerokości i wysokości, poprzednim razem podwójnie ucinał obraz z prawej strony. Doszła też nowa wartość startBar według której obliczane są wysokości dokąd namalować tło, oraz odkąd malować pasek. I to działa, bo jeśli usuniemy sobie metodę odpowiedzialną za rysowanie paska otrzymamy taki efekt:

Nowe wymiary, ścieżki w Androidzie - DSP#14

Zmiany do tego momentu są zaccomitowane jako paths.

To tyle na dzisiaj, dosyć krótko, ale zbliża się koniec konkursu, a do zrobienia zostało już tylko kilka elementów. W ramach rekompensaty zapraszam na kolejny post który pojawi się w ciągu 5 minut 😉 Będzie zdecydowanie dłuższy i ciekawszy. A w następnym poście projektowym obsłużymy odpowiednio zagięcia w rogach kalendarza, oraz dodamy wyświetlanie daty na środku.