Kontrolowanie odkształceń podczas skalowania

Flash Player 9 i nowsze wersje, Adobe AIR 1.0 i nowsze wersje

Normalnie w przypadku skalowania obiektu wyświetlanego (na przykład rozciągania obiektu w poziomie) w rezultacie cały obiekt zostaje rozszerzony po równo, dlatego każda jego część zostaje rozszerzona w takim samym stopniu. W przypadku elementów graficznych i designerskim jest to zwykle bardzo pożądane. Jednak czasami konieczne jest wybierane części obiektu wyświetlanego, które będą rozciągane, a które pozostaną niezmienione. Przykładem jest przycisk, który jest prostokątem z zaokrąglonymi rogami. W przypadku normalnego skalowania rogi przycisku są rozciągane, co sprawia, że promień rogu zmienia się w miarę zmiany wielkości przycisku.

<Zniekształcenie po skalowaniu przycisku z zaokrąglonymi narożnikami>

Jednak w tym przypadku konieczne jest kontrolowanie skalowania i możliwość wyznaczenia obszarów, których skala powinna się zmieniać (proste boki i środek), a także obszarów, które nie powinny się zmieniać (rogi) — dzięki temu skalowanie będzie odbywać się bez widocznych odkształceń.

<Przycisk skalowany bez zniekształceń>

Istnieje możliwość korzystania ze skalowania 9-częściowego (Scale-9) w celu tworzenia obiektów wyświetlanych, w których możliwe jest kontrolowanie sposobu skalowania. W przypadku skalowania 9-częściowego obiekt wyświetlany zostaje podzielony na dziewięć osobnych prostokątów (siatka 3 na 3, podobnie jak siatka do gry „gwiazdka-krzyżyk”). Prostokąty nie musza mieć tej samej wielkości — użytkownik wybiera rozmieszczenie linii siatki. Treść znajdująca się w czterech prostokątach narożnych (np. zaokrąglone narożniki kwadratu) nie będzie rozciągana ani kompresowana podczas skalowania obiektu wyświetlanego. Górne środkowe i dolne środkowe prostokąty będą skalowane w poziomie, ale nie w pionie, a prostokąty środkowe po lewej i prawej stronie będą skalowane w pionie, ale nie w poziomie. Prostokąt środkowy będzie skalowany w poziomie i w pionie.

<Siatka skalowania 9-częściowego>

W takim przypadku podczas tworzenia obiektu wyświetlanego, którego fragmenty nigdy nie będą skalowane, należy się upewnić, że linie podziałowe 9-częściowej siatki skalowania zostaną rozmieszczone w taki sposób, aby treść, która nie będzie skalowana, znalazła się w jednym z prostokątów narożnych.

W języku ActionScript ustawienie wartości dla właściwości scale9Grid obiektu wyświetlanego powoduje uruchomienie skalowania 9-częściowego dla obiektu i powoduje zdefiniowanie wielkości prostokątów na siatce Scale-9 obiektu. Wartością właściwości scale9Grid może być instancja klasy, co przedstawiono poniżej:

myButton.scale9Grid = new Rectangle(32, 27, 71, 64);

Cztery parametry konstruktora Rectangle to współrzędna x, współrzędna y, szerokość i wysokość. W tym przykładzie lewy górny róg prostokąta został umieszczony w punkcie x: 32 i y: 27 na obiekcie wyświetlanym o nazwie myButton . Prostokąt ma 71 pikseli szerokości i 64 pikseli wysokości (jego prawa krawędź znajduje się na współrzędnej x 103 na obiekcie wyświetlanym, a jego dolna krawędź znajduje się na współrzędnej y 92 na obiekcie wyświetlanym).

<Podstawowy prostokąt siatki Scale-9>

Rzeczywisty obszar należący do regionu jest zdefiniowany przez instancję Rectangle, która reprezentuje prostokąt środkowy siatki Scale-9. Inne prostokąty są obliczane przez program Flash Player lub AIR poprzez wydłużenie boków instancji Rectangle, co przedstawiono poniżej:

<Pełna siatka Scale-9 uzyskana na podstawie podstawowego prostokąta>

W takim przypadku powiększanie lub zmniejszanie skali przycisku nie powoduje rozciągania ani kompresowania zaokrąglonych narożników, ale wielkości innych obszarów zostaną dostosowane w celu dopasowania do skalowania.

<Efekt skalowania 9-warstwowego w miarę skalowania przycisku w obydwu kierunkach>
A.
myButton.width = 131;myButton.height = 106;

B.
myButton.width = 73;myButton.height = 69;

C.
myButton.width = 54;myButton.height = 141;