Android 14 wprowadza świetne funkcje i interfejsy API dla deweloperów. Poniższe materiały pomogą Ci poznać funkcje aplikacji i zacząć korzystać z powiązanych interfejsów API.
Szczegółową listę dodanych, zmodyfikowanych i usuniętych interfejsów API znajdziesz w raporcie o różnicach w interfejsach API. Szczegółowe informacje o dodanych interfejsach API znajdziesz w dokumentacji interfejsu Android API. W przypadku Androida 14 poszukaj interfejsów API dodanych na poziomie 34. Aby dowiedzieć się więcej o obszarach, w których zmiany na platformie mogą mieć wpływ na Twoje aplikacje, zapoznaj się ze zmianami w działaniu Androida 14 w przypadku aplikacji kierowanych na Androida 14 i w przypadku wszystkich aplikacji.
Internacjonalizacja
Wybór języka według aplikacji
Android 14 rozszerza funkcje języka na poziomie aplikacji, które zostały wprowadzone w Androidzie 13 (poziom API 33), o te dodatkowe możliwości:
Automatyczne generowanie
localeConfigw aplikacji: od wersji Android Studio Giraffe Canary 7 i AGP 8.1.0-alpha07 możesz skonfigurować aplikację tak, aby automatycznie obsługiwała ustawienia języka na poziomie aplikacji. Na podstawie zasobów projektu wtyczka Androida do obsługi Gradle generuje plikLocaleConfigi dodaje do niego odwołanie w pliku manifestu końcowego. Dzięki temu nie musisz już tworzyć ani aktualizować tego pliku ręcznie. AGP korzysta z zasobów w folderachresw modułach aplikacji oraz z zależnych modułów bibliotek, aby określić lokalizacje, które mają być uwzględnione w plikuLocaleConfig.Dynamiczne aktualizacje
localeConfigaplikacji: użyj metodsetOverrideLocaleConfig()igetOverrideLocaleConfig()wLocaleManager, aby dynamicznie aktualizować listę obsługiwanych języków aplikacji w ustawieniach systemu urządzenia. Dzięki tej elastyczności możesz dostosować listę obsługiwanych języków w danym regionie, przeprowadzać eksperymenty A/B lub przesyłać zaktualizowaną listę lokalizacji, jeśli Twoja aplikacja korzysta z push na serwerze do celów lokalizacji.Widoczność języka aplikacji w edytorach metody wprowadzania: edytorzy metody wprowadzania mogą korzystać z metody
getApplicationLocales(), aby sprawdzić język bieżącej aplikacji i dostosować do niego język edytora metody wprowadzania.
Grammatical Inflection API
3 miliardy ludzi mówi językami z płcią: językami, w których kategorie gramatyczne (np. rzeczowniki, czasowniki, przymiotniki i przyimki) odmieniają się w zależności od płci osób i rzeczy, do których się zwracamy lub o których mówimy. Tradycyjnie wiele języków z płcią gramatyczną używa męskiej formy gramatycznej jako domyślnej lub uniwersalnej.
Zwracanie się do użytkowników w niewłaściwym rodzaju gramatycznym, np. do kobiet w męskim rodzaju gramatycznym, może negatywne wpłynąć na ich wyniki i postawę. Z kolei interfejs z językiem, który poprawnie odzwierciedla płeć gramatyczną użytkownika, może zwiększyć zaangażowanie użytkowników i zapewnić bardziej spersonalizowane i naturalne wrażenia.
To help you build a user-centric UI for gendered languages, Android 14 introduces the Grammatical Inflection API, which lets you add support for grammatical gender without refactoring your app.
Preferencje regionalne
Preferencje regionalne pozwalają użytkownikom personalizować jednostki temperatury. dnia tygodnia i systemy numeracji. Europejczyk mieszkający w Stanach Zjednoczonych może preferować jednostki temperatury w stopniach Celsjusza zamiast w stopniach Fahrenheita, a aplikacje powinny traktować poniedziałek jako początek tygodnia zamiast niedzieli, która jest domyślną jednostką w Stanach Zjednoczonych.
Nowe menu ustawień Androida dla tych ustawień da użytkownikom
wykrywalną i scentralizowaną lokalizację na potrzeby zmiany ustawień aplikacji. Te ustawienia są również zachowywane podczas tworzenia kopii zapasowej i przywracania. Kilka interfejsów API i intencji, takich jak getTemperatureUnit i getFirstDayOfWeek, przyznaje aplikacji uprawnienia do odczytu ustawień użytkownika, dzięki czemu aplikacja może dostosowywać sposób wyświetlania informacji. Możesz też zarejestrować
BroadcastReceiver włączona
ACTION_LOCALE_CHANGED.
obsługi zmian konfiguracji języka w przypadku zmiany preferencji regionalnych.
Aby znaleźć te ustawienia, otwórz aplikację Ustawienia i kliknij System > Języki wejście > Ustawienia regionalne.
Ułatwienia dostępu
Nieliniowe skalowanie czcionki do 200%
Starting in Android 14, the system supports font scaling up to 200%, providing users with additional accessibility options.
To prevent large text elements on screen from scaling too large, the system applies a nonlinear scaling curve. This scaling strategy means that large text doesn't scale at the same rate as smaller text. Nonlinear font scaling helps preserve the proportional hierarchy between elements of different sizes while mitigating issues with linear text scaling at high degrees (such as text being cut off or text that becomes harder to read due to an extremely large display sizes).
Test your app with nonlinear font scaling
If you already use scaled pixels (sp) units to define text sizing, then these additional options and scaling improvements are applied automatically to the text in your app. However, you should still perform UI testing with the maximum font size enabled (200%) to ensure that your app applies the font sizes correctly and can accommodate larger font sizes without impacting usability.
To enable 200% font size, follow these steps:
- Open the Settings app and navigate to Accessibility > Display size and text.
- For the Font size option, tap the plus (+) icon until the maximum font size setting is enabled, as shown in the image that accompanies this section.
Use scaled pixel (sp) units for text-sizes
Remember to always specify text sizes in sp units. When your app uses sp units, Android can apply the user's preferred text size and scale it appropriately.
Don't use sp units for padding or define view heights assuming implicit padding: with nonlinear font scaling sp dimensions might not be proportional, so 4sp + 20sp might not equal 24sp.
Convert scaled pixel (sp) units
Use TypedValue.applyDimension() to convert from sp units
to pixels, and use TypedValue.deriveDimension() to
convert pixels to sp. These methods apply the appropriate nonlinear scaling
curve automatically.
Avoid hardcoding equations using
Configuration.fontScale or
DisplayMetrics.scaledDensity. Because font scaling is
nonlinear, the scaledDensity field is no longer accurate. The fontScale
field should be used for informational purposes only because fonts are no longer
scaled with a single scalar value.
Use sp units for lineHeight
Always define android:lineHeight using sp units instead
of dp, so the line height scales along with your text. Otherwise, if your text
is sp but your lineHeight is in dp or px, it doesn't scale and looks cramped.
TextView automatically corrects the lineHeight so that your intended
proportions are preserved, but only if both textSize and lineHeight are
defined in sp units.
Aparat i multimedia
Ultra HDR w przypadku obrazów
Android 14 obsługuje obrazy High Dynamic Range (HDR), które zachowują więcej informacji z czujnika podczas robienia zdjęcia, co umożliwia uzyskanie żywszych kolorów i większego kontrastu. Android używa formatu ultra HDR, który jest w pełni zgodny z wstecz z obrazami JPEG. Dzięki temu aplikacje mogą płynnie współpracować z obrazami HDR, wyświetlając je w standardowym zakresie dynamiki (SDR), gdy zajdzie taka potrzeba.
Przetwarzanie tych obrazów w interfejsie w HDR jest wykonywane automatycznie przez platformę, gdy aplikacja zechce używać interfejsu HDR w oknie aktywności, albo za pomocą elementu manifestu, albo w czasie działania przez wywołanieWindow.setColorMode(). Na obsługiwanych urządzeniach możesz też robić skompresowane zdjęcia Ultra
HDR. Dzięki większej liczbie kolorów odzyskanych z czujnika edytowanie w postprodukcji może być bardziej elastyczne. Pliki Gainmap powiązane z obrazami Ultra HDR mogą służyć do ich renderowania za pomocą OpenGL lub Vulkan.
Powiększanie, ustawianie ostrości, podgląd po zrobieniu zdjęcia i inne funkcje w rozszerzeniach aparatu
Android 14 upgrades and improves camera extensions, allowing apps to handle longer processing times, which enables improved images using compute-intensive algorithms like low-light photography on supported devices. These features give users an even more robust experience when using camera extension capabilities. Examples of these improvements include:
- Dynamic still capture processing latency estimation provides much more
accurate still capture latency estimates based on the current scene and
environment conditions. Call
CameraExtensionSession.getRealtimeStillCaptureLatency()to get aStillCaptureLatencyobject that has two latency estimation methods. ThegetCaptureLatency()method returns the estimated latency betweenonCaptureStartedandonCaptureProcessStarted(), and thegetProcessingLatency()method returns the estimated latency betweenonCaptureProcessStarted()and the final processed frame being available. - Support for capture progress callbacks so that apps can display the current
progress of long-running, still-capture processing operations. You can check
if this feature is available with
CameraExtensionCharacteristics.isCaptureProcessProgressAvailable, and if it is, you implement theonCaptureProcessProgressed()callback, which has the progress (from 0 to 100) passed in as a parameter. Extension specific metadata, such as
CaptureRequest.EXTENSION_STRENGTHfor dialing in the amount of an extension effect, such as the amount of background blur withEXTENSION_BOKEH.Postview Feature for Still Capture in camera extensions, which provides a less-processed image more quickly than the final image. If an extension has increased processing latency, a postview image could be provided as a placeholder to improve UX and switched out later for the final image. You can check if this feature is available with
CameraExtensionCharacteristics.isPostviewAvailable. Then you can pass anOutputConfigurationtoExtensionSessionConfiguration.setPostviewOutputConfiguration.Support for
SurfaceViewallowing for a more optimized and power-efficient preview render path.Support for tap to focus and zoom during extension usage.
Zoom na matrycy
Gdy REQUEST_AVAILABLE_CAPABILITIES_STREAM_USE_CASE w CameraCharacteristics zawiera SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW, aplikacja może korzystać z zaawansowanych możliwości czujnika, aby zapewnić przycięty strumień RAW z tymi samymi pikselami co pełne pole widzenia, używając CaptureRequest z docelowym strumieniem RAW, dla którego ustawiono CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW.
Dzięki wdrożeniu ustawień zastąpienia żądania zaktualizowana kamera umożliwia użytkownikom sterowanie zoomem jeszcze przed przygotowaniem innych ustawień.
Bezstratny dźwięk przez USB
Android 14 gains support for lossless audio formats for audiophile-level
experiences over USB wired headsets. You can query a USB device for its
preferred mixer attributes, register a listener for changes in preferred mixer
attributes, and configure mixer attributes using the
AudioMixerAttributes class. This class represents the
format, such as channel mask, sample rate, and behavior of the audio mixer. The
class allows for audio to be sent directly, without mixing,
volume adjustment, or processing effects.
Wydajność i narzędzia dla programistów
Credential Manager
Android 14 dodaje Credential Manager jako interfejs API platformy, z dodatkowym wsparciem dla urządzeń z Androidem 4.4 (poziom interfejsu API 19) za pomocą biblioteki Jetpack korzystającej z Usług Google Play. Credential Manager ułatwia użytkownikom logowanie się dzięki interfejsom API, które pobierają i przechowują dane logowania za pomocą dostawców danych logowania skonfigurowanych przez użytkownika. Credential Manager obsługuje wiele metod logowania, w tym logowanie przy użyciu nazwy użytkownika i hasła, kluczy dostępu i rozwiązań logowania sfederowanego (np. logowania przez Google) w jednym interfejsie API.
Klucze dostępu mają wiele zalet. Na przykład klucze dostępu oparte są na standardach branżowych, mogą działać w różnych systemach operacyjnych i ekosystemach przeglądarek oraz mogą być używane zarówno w witrynach, jak i w aplikacjach.
Więcej informacji znajdziesz w dokumentacji Menedżera danych uwierzytelniających i kluczy dostępu oraz w poście na blogu na temat Menedżera danych uwierzytelniających i kluczy dostępu.
Health Connect
Health Connect to repozytorium danych o zdrowiu i kondycji fizycznej użytkownika na urządzeniu. Umożliwia ona użytkownikom udostępnianie danych między ulubionymi aplikacjami i zarządzanie w jednym miejscu danymi, które chcą udostępniać tym aplikacjom.
Na urządzeniach z Androidem w wersjach starszych niż 14 aplikację Health Connect można pobrać ze Sklepu Google Play. Od Androida 14 Zarządzanie danymi o zdrowiu jest częścią platformy i otrzymuje aktualizacje w ramach aktualizacji systemowych Google Play bez konieczności osobnego pobierania. Dzięki temu Health Connect może być często aktualizowany, a Twoje aplikacje mogą korzystać z Health Connect na urządzeniach z Androidem w wersji 14 lub nowszej. Użytkownicy mogą korzystać z Health Connect w ustawieniach urządzenia, a ustawienia prywatności są zintegrowane z ustawieniami systemu.
Health Connect zawiera kilka nowych funkcji w Androidzie 14, takich jak trasy treningów, które umożliwiają użytkownikom udostępnianie trasy treningu, którą można wyświetlić na mapie. Trasa to lista lokalizacji zapisanych w określonym przedziale czasu. Aplikacja może wstawiać trasy do sesji ćwiczeń, łącząc je ze sobą. Aby mieć pełną kontrolę nad tymi poufnymi danymi, użytkownicy muszą zezwolić na udostępnianie poszczególnych tras innym aplikacjom.
Więcej informacji znajdziesz w dokumentacji dotyczącej funkcji Health Connection oraz w poście na blogu Co nowego w Androidzie Health.
Aktualizacje OpenJDK 17
Android 14 kontynuuje proces odświeżania podstawowych bibliotek Androida, aby dostosować je do funkcji najnowszych wersji OpenJDK LTS, w tym do aktualizacji bibliotek i obsługi języka Java 17 dla deweloperów aplikacji i platform.
Dostępne są następujące funkcje i ulepszenia:
- Zaktualizowano około 300 klas
java.base, aby obsługiwały Java 17. - Blokami tekstowymi, które wprowadzają do języka programowania Java wielowierszowe ciągi znaków.
- dopasowywanie wzoru do instanceof, które umożliwia traktowanie obiektu jako mającego określony typ w
instanceofbez żadnych dodatkowych zmiennych; - Zamknięte klasy, które umożliwiają ograniczenie zakresu klas i interfejsów, które mogą je rozszerzać lub implementować.
Dzięki aktualizacjom systemowym Google Play (projekt Mainline) ponad 600 milionów urządzeń może otrzymywać najnowsze aktualizacje środowiska wykonawczego Androida (ART), które zawierają te zmiany. Jest to część naszego zobowiązania do zapewnienia aplikacjom bardziej spójnego i bezpiecznego środowiska na różnych urządzeniach oraz udostępniania użytkownikom nowych funkcji i możliwości niezależnie od wersji platformy.
Java i OpenJDK są znakami towarowymi lub zastrzeżonymi znakami towarowymi firmy Oracle lub jej podmiotów stowarzyszonych.
Ulepszenia w sklepach z aplikacjami
Android 14 wprowadza kilka interfejsów API PackageInstaller, które umożliwiają sklepom z aplikacjami poprawę wrażeń użytkowników.
Prośba o zatwierdzenie instalacji przed pobraniem
Instalacja lub aktualizacja aplikacji może wymagać zaakceptowania przez użytkownika.
Na przykład gdy instalator korzystający z uprawnienia REQUEST_INSTALL_PACKAGES próbuje zainstalować nową aplikację. W poprzednich wersjach Androida sklepy z aplikacjami mogą prosić o pozwolenie użytkownika dopiero po zapisaniu plików APK w sesji instalacji i zaakceptowaniu sesji.
Od Androida 14 metoda requestUserPreapproval() pozwala instalatorom poprosić o pozwolenie użytkownika przed rozpoczęciem sesji instalacji. Ta funkcja umożliwia opóźnienie pobierania plików APK do momentu zatwierdzenia instalacji przez użytkownika. Ponadto po zatwierdzeniu instalacji przez użytkownika aplikacja może pobrać i zainstalować aplikację w tle bez przerywania pracy użytkownika.
Przejmowanie odpowiedzialności za przyszłe aktualizacje
Metoda setRequestUpdateOwnership() pozwala instalatorowi wskazać systemowi, że będzie odpowiedzialny za przyszłe aktualizacje instalowanej aplikacji. Ta funkcja umożliwia egzekwowanie własności aktualizacji, co oznacza, że tylko właściciel aktualizacji może instalować automatyczne aktualizacje aplikacji. Egzekwowanie własności aktualizacji pomaga zapewnić, aby użytkownicy otrzymywali aktualizacje tylko z oczekiwanego sklepu z aplikacjami.
Aby zainstalować aktualizację, każdy inny instalator, w tym korzystający z uprawnienia INSTALL_PACKAGES, musi uzyskać wyraźną zgodę użytkownika. Jeśli użytkownik zdecyduje się na przeprowadzenie aktualizacji z innego źródła, utraci prawo własności do aktualizacji.
Aktualizuj aplikacje w godzinach, w których nie zakłócasz pracy.
Sklepy z aplikacjami zwykle nie chcą aktualizować aplikacji, która jest aktywnie używana, ponieważ powoduje to przerwanie jej procesów, co może zakłócić działanie użytkownika.
Od Androida 14 interfejs API InstallConstraints daje instalatorom możliwość zapewnienia, że aktualizacje aplikacji będą się odbywać w odpowiednim momencie. Sklep z aplikacjami może na przykład wywołać metodę commitSessionAfterInstallConstraintsAreMet(), aby upewnić się, że aktualizacja zostanie zaakceptowana tylko wtedy, gdy użytkownik nie będzie już korzystać z aplikacji.
Bezproblemowe instalowanie opcjonalnych podziałów
W przypadku podzielonych plików APK funkcje aplikacji mogą być dostarczane w osobnych plikach APK, a nie jako monolityczny plik APK. Dzielone pliki APK umożliwiają sklepom z aplikacjami optymalizację dostarczania różnych komponentów aplikacji. Sklepy z aplikacjami mogą na przykład optymalizować na podstawie właściwości urządzenia docelowego. Interfejs API PackageInstaller obsługuje dzielenie na części od czasu wprowadzenia na poziomie 22 interfejsu API.
W Androidzie 14 metoda setDontKillApp() umożliwia instalatorowi wskazanie, że działające procesy aplikacji nie powinny zostać zakończone podczas instalowania nowych części. Sklepy z aplikacjami mogą używać tej funkcji do płynnego instalowania nowych funkcji aplikacji, gdy użytkownik z niej korzysta.
Pakiety metadanych aplikacji
Od Androida 14 instalator pakietów Androida umożliwia określanie metadanych aplikacji, takich jak zasady bezpieczeństwa danych, które mają być wyświetlane na stronach sklepów z aplikacjami, np. w Google Play.
Wykrywanie, kiedy użytkownicy robią zrzuty ekranu urządzenia
To create a more standardized experience for detecting screenshots, Android 14 introduces a privacy-preserving screenshot detection API. This API lets apps register callbacks on a per-activity basis. These callbacks are invoked, and the user is notified, when the user takes a screenshot while that activity is visible.
Interfejs użytkownika
Działania niestandardowe na arkuszu udostępniania i ulepszone rankingowanie
Android 14 updates the system sharesheet to support custom app actions and more informative preview results for users.
Add custom actions
With Android 14, your app can add custom actions to the system sharesheet it invokes.
Improve ranking of Direct Share targets
Android 14 uses more signals from apps to determine the ranking of the direct share targets to provide more helpful results for the user. To provide the most useful signal for ranking, follow the guidance for improving rankings of your Direct Share targets. Communication apps can also report shortcut usage for outgoing and incoming messages.
Obsługa wbudowanych i niestandardowych animacji przewidywanego przejścia wstecz
Android 13 introduced the predictive back-to-home animation behind a developer option. When used in a supported app with the developer option enabled, swiping back shows an animation indicating that the back gesture exits the app back to the home screen.
Android 14 includes multiple improvements and new guidance for Predictive Back:
- You can set
android:enableOnBackInvokedCallback=trueto opt in to predictive back system animations per-Activity instead of for the entire app. - We've added new system animations to accompany the back-to-home animation from Android 13. The new system animations are cross-activity and cross-task, which you get automatically after migrating to Predictive Back.
- We've added new Material Component animations for Bottom sheets, Side sheets, and Search.
- We've created design guidance for creating custom in-app animations and transitions.
- We've added new APIs to support custom in-app transition animations:
handleOnBackStarted,handleOnBackProgressed,handleOnBackCancelledinOnBackPressedCallbackonBackStarted,onBackProgressed,onBackCancelledinOnBackAnimationCallback- Use
overrideActivityTransitioninstead ofoverridePendingTransitionfor transitions that respond as the user swipes back.
With this Android 14 preview release, all features of Predictive Back remain behind a developer option. See the developer guide to migrate your app to predictive back, as well as the developer guide to creating custom in-app transitions.
Zastąpienia ustawień producenta urządzenia z dużym ekranem dla poszczególnych aplikacji
Zastąpienia dotyczące aplikacji umożliwiają producentom urządzeń zmianę działania aplikacji na urządzeniach z dużym ekranem. Na przykład zastąpienie FORCE_RESIZE_APP instruuje system, aby zmienił rozmiar aplikacji, aby pasowała do wyświetlanych wymiarów (unikając trybu zgodności rozmiaru), nawet jeśli w manifeście aplikacji ustawiono resizeableActivity="false".
Zastąpienia mają na celu poprawę wrażeń użytkowników na dużych ekranach.
Nowe właściwości pliku manifestu umożliwiają wyłączenie w przypadku aplikacji niektórych zastąpień producenta urządzenia.
Zastąpienia ustawień aplikacji dla użytkowników dużych ekranów
Per-app overrides change the behavior of apps on large screen devices. For example, the OVERRIDE_MIN_ASPECT_RATIO_LARGE device manufacturer override sets the app aspect ratio to 16:9 regardless of the app's configuration.
Android 14 QPR1 enables users to apply per‑app overrides by means of a new settings menu on large screen devices.
Udostępnianie ekranu aplikacji
App screen sharing enables users to share an app window instead of the entire device screen during screen content recording.
With app screen sharing, the status bar, navigation bar, notifications, and other system UI elements are excluded from the shared display. Only the content of the selected app is shared.
App screen sharing improves productivity and privacy by enabling users to run multiple apps but limit content sharing to a single app.
Inteligentna odpowiedź na klawiaturze Gboard na Pixelu 8 Pro oparta na LLM
Na urządzeniach Pixel 8 Pro z aktualizacją z listopada deweloperzy mogą wypróbować inteligentne odpowiedzi lepszej jakości w klawiaturze Gboard, które są obsługiwane przez duże modele językowe (LLM) działające na procesorze Google Tensor.
Ta funkcja jest dostępna w wersji testowej w języku angielskim (USA) w aplikacji WhatsApp, Line i KakaoTalk. Wymaga użycia urządzenia Pixel 8 Pro z klawiaturą Gboard.
Aby wypróbować tę funkcję, najpierw włącz ją w sekcji Ustawienia > Opcje programisty > Ustawienia AICore > Włącz trwałe AICore.
Następnie otwórz rozmowę w obsługiwanej aplikacji, aby zobaczyć inteligentną odpowiedź w pasku sugestii Gboard, która jest obsługiwana przez LLM.
Grafika
Ścieżki można wyszukiwać i interpolować
Interfejs API Path na Androida to zaawansowany i elastyczny mechanizm tworzenia i renderowania grafiki wektorowej, który umożliwia kreślenie lub wypełnianie ścieżki, tworzenie ścieżki z segmentów linii albo krzywych kwadratowych i krzywych sześciennych, wykonywanie operacji logicznych w celu uzyskania jeszcze bardziej złożonych kształtów lub wszystkich tych elementów jednocześnie. Ograniczeniem jest możliwość sprawdzenia, co tak naprawdę znajduje się w obiekcie ścieżki. Elementy wewnętrzne obiektu są nieprzezroczyste po jego utworzeniu.
Aby utworzyć Path, użyj metod wywoływania takich jak moveTo(), lineTo() i cubicTo(), aby dodać segmenty ścieżki. Nie ma jednak możliwości określenia, jakie segmenty mają się znaleźć na tej ścieżce, więc musisz zachować te informacje w momencie tworzenia.
Począwszy od Androida 14 możesz wysyłać zapytania dotyczące ścieżek, aby dowiedzieć się, co się na nich znajduje.
Najpierw musisz uzyskać obiekt PathIterator, korzystając z interfejsu API Path.getPathIterator:
Kotlin
val path = Path().apply { moveTo(1.0f, 1.0f) lineTo(2.0f, 2.0f) close() } val pathIterator = path.pathIterator
Java
Path path = new Path(); path.moveTo(1.0F, 1.0F); path.lineTo(2.0F, 2.0F); path.close(); PathIterator pathIterator = path.getPathIterator();
Następnie możesz wywołać metodę PathIterator, by iterować po kolei segmenty i pobrać wszystkie niezbędne dane dla każdego z nich. W tym przykładzie użyto obiektów PathIterator.Segment, które gromadzą dane w formie pakietów:
Kotlin
for (segment in pathIterator) { println("segment: ${segment.verb}, ${segment.points}") }
Java
while (pathIterator.hasNext()) { PathIterator.Segment segment = pathIterator.next(); Log.i(LOG_TAG, "segment: " + segment.getVerb() + ", " + segment.getPoints()); }
Funkcja PathIterator ma też wersję next(), która nie przydziela pamięci, i możesz jej użyć do przekazania bufora, aby przechowywać dane punktowe.
Jednym z ważnych zastosowań zapytań o dane Path jest interpolacja. Możesz na przykład chcieć animować (czyli przekształcać) 2 różne ścieżki. Aby jeszcze bardziej uprościć ten przypadek użycia, Android 14 zawiera też metodę interpolate() w Path. Zakładając, że 2 ścieżki mają taką samą strukturę wewnętrzną, metoda interpolate() tworzy nowy Path z tym interpolowanym wynikiem. Ten przykład zwraca ścieżkę, która jest połową (interpolacja liniowa 0,5) ścieżki path i otherPath:
Kotlin
val interpolatedResult = Path() if (path.isInterpolatable(otherPath)) { path.interpolate(otherPath, .5f, interpolatedResult) }
Java
Path interpolatedResult = new Path(); if (path.isInterpolatable(otherPath)) { path.interpolate(otherPath, 0.5F, interpolatedResult); }
Biblioteka Jetpack graphics-path umożliwia korzystanie z podobnych interfejsów API również w starszych wersjach Androida.
Niestandardowe siatki z shaderami wierzchołków i fragmentów
Android od dawna obsługuje rysowanie trójkątnych siatek z niestandardowym cieniowaniem, ale format siatki wejściowej był ograniczony do kilku wstępnie zdefiniowanych kombinacji atrybutów. Android 14 obsługuje niestandardowe siatki, które można zdefiniować jako trójkąty lub trójkątne paski, a także opcjonalnie posortować. Te siatki są określane za pomocą niestandardowych atrybutów, kroków wierzchołków, zmiennych oraz shaderów wierzchołków i fragmentów napisanych w AGSL.
Shader wierzchołka definiuje zmienne, takie jak pozycja i kolor, a shader fragmentu może opcjonalnie zdefiniować kolor piksela, zwykle za pomocą zmiennych utworzonych przez shader wierzchołka. Jeśli kolor jest dostarczany przez fragment shadera, jest on mieszany z bieżącym kolorem Paint za pomocą trybu mieszania wybranego podczas rysowania siatki. Tablice jednolite można przekazywać do shaderów wierzchołkowych i fragmentów, aby zwiększyć elastyczność.
Renderowanie bufora sprzętowego w Canvas
To assist in using Android's Canvas API to draw with
hardware acceleration into a HardwareBuffer, Android 14
introduces HardwareBufferRenderer. This API is
particularly useful when your use case involves communication with the system
compositor through SurfaceControl for low-latency
drawing.