Rysowanie, K-16, 2017/2018 64 Rysowanie - podstawy Klasa rysująca dziedziczy po klasie graficznej View (do prostych zastosowań) lub SurfaceView (bardziej wydajne) Obiekt dziedziczący po klasie View ładowany jak layout przeciążona metoda ondraw( ) odpowiada za rysowanie: protected void ondraw(canvas canvas) { }, K-16, 2017/2018 65 2018 Wszelkie prawa zastrzeżone 1
Wybrane metody rysujące drawbitmap(bitmap bitmap, float left, float top, Paint paint) drawpicture(picture picture) drawcircle(float cx, float cy, float radius, Paint paint) drawline(float startx, float starty, float stopx, float stopy, Paint paint) drawpoint(float x, float y, Paint paint) drawrect(float left, float top, float right, float bottom, Paint paint) drawtext(string text, float x, float y, Paint paint) getheight() getwidth() translate(float dx, float dy), K-16, 2017/2018 66 Rysowanie Głowna aktywność ładuje obiekt rysujący jak layout., K-16, 2017/2018 67 2018 Wszelkie prawa zastrzeżone 2
Rysowanie true dla ciągłego nasłuchu, K-16, 2017/2018 68 Konstruktory Konstruktor dla widoku pełnoekranowego przełączanego przez setcontentview(); Konstruktor pozwalający na rysowanie jako komponent na leyoucie z sekcji Custom & Library Views, K-16, 2017/2018 69 2018 Wszelkie prawa zastrzeżone 3
Klasa View na layoucie Klasa musi dziedziczyć z View Klasa musi zawierać 2-argumentowy konstruktor z kontekstem i atrybutami Ikona z menu komponentów graficznych Custom & Library Views Traktowana jak zwyczajny komponent GUI, K-16, 2017/2018 70 Rysowanie/animacja Mechanizmy tworzenia animacji: Property Animation animacja właściwości od wersji 3.0 (API 11), możliwość animowania dowolnych właściwości (pól) obiektów w czasie, określając czas trwania, interpolację kroków animacji, powtarzalność ruchu, prędkość odświeżania i grupując obiekty w zestawy View Animation animacja na bazie klasy View ruch programowany jako kombinacja m.in. transformacji translacji, rotacji i skalowania w czasie Drawable Animation na podstawie gotowych obrazów klatek wyświetlanie klatek animacji załadowanych, np. w postaci filmu, K-16, 2017/2018 71 2018 Wszelkie prawa zastrzeżone 4
http://developer.android.com/guide/topics/graphics/2d-graphics.html Techniki rysowania Klasą Canvas W klasie View W klasie SurfaceView (w osobnym wątku poza głównym GUI) Klasa Drawable Gotowe klatki i filmy Resource Grafika zapisana w projekcie, w zasobach XML Programowanie animacji w języku XML ShapeDrawable Klasa do rysowania z podstawowych figur jak w Canvas, ale obiektowo Nine-patch Grafika z automatycznym obramowaniem OpenGL, akceleracja sprzętowa, K-16, 2017/2018 72 Ekran dotykowy Klawiatura itp. Interfejsy, K-16, 2017/2018 73 2018 Wszelkie prawa zastrzeżone 5
Interfejs OnTouchListener nasłuch zdarzenia Interfejs do nasłuchu akcji dotknięcia ekranu. Jego implementacja wymaga istnienia metody ontouch( ) zwracającej obiekt View, z którego nadeszła akcja oraz treść akcji., K-16, 2017/2018 74 Interfejs OnKeyListener nasłuch zdarzenia Nasłuch klawiszy telefonu z informacją o kodzie naciśniętego klawisza., K-16, 2017/2018 75 2018 Wszelkie prawa zastrzeżone 6
nasłuch klawiszy Klawisze: onkeyup(int keycode, KeyEvent event) onkeydown(int keycode, KeyEvent event) onkeylongpress(int keycode, KeyEvent event) onkeymultiple(int keycode, int repeatcount, KeyEvent event), K-16, 2017/2018 76 nasłuchy ekranu Ekran: Dotyk ekranu: ontouchevent(motionevent event) Drag&Drop (przeciągnij i upuść) ondragevent(dragevent event) http://developer.android.com/reference/android/view/motionevent.html http://developer.android.com/reference/android/view/dragevent.html, K-16, 2017/2018 77 2018 Wszelkie prawa zastrzeżone 7
Wybrane interfejsy nasłuchu zdarzeń onclick() z nasłuchu OnClickListener dotknięcie w trybie dotykowym, kliknięcie w trybie wyboru kursorem/myszą. onlongclick() z nasłuchu OnLongClickListener dotknięcie i przytrzymanie (> 1 s) w trybie dotykowym, kliknięcie i przytrzymanie (> 1 s) w trybie wyboru kursorem/myszą. onfocuschange() z nasłuchu OnFocusChangeListener najechanie lub zjechanie kursora z elementu graficznego Tylko w trybie wyboru kursorem/myszą! onkey() z nasłuchu OnKeyListener naciśnięcie lub puszczenie dowolnego klawisza telefonu Tylko gdy obiekt graficzny jest wybrany (isfocused == true)! ontouch() z nasłuchu OnTouchListener każdy rodzaj dotknięcia (przesuwanie i puszczenie też) Tylko w obrębie danego obiektu graficznego! oncreatecontextmenu() z nasłuchu OnCreateContextMenuListener przy tworzeniu menu pływającego po onlongclick(), jeśli jest odpowiednio zarejestrowane, K-16, 2017/2018 78 Pliki graficzne Wczytywanie plików graficznych (JPG, PNG, GIF):, K-16, 2017/2018 79 2018 Wszelkie prawa zastrzeżone 8
Przykład na podstawie: http://code.tutsplus.com/tutorials/androidsdk-create-a-drawing-app-touch-interaction--mobile-19202, K-16, 2017/2018 80 Przykład, K-16, 2017/2018 81 2018 Wszelkie prawa zastrzeżone 9
Przykład, K-16, 2017/2018 82 Przykład, K-16, 2017/2018 83 2018 Wszelkie prawa zastrzeżone 10
Przykład, K-16, 2017/2018 84 Przykład, K-16, 2017/2018 85 2018 Wszelkie prawa zastrzeżone 11
Rysowanie materiały dodatkowe Dokumentacja: http://developer.android.com/reference/android/graphics/canvas.html Dla zaawansowanych przykłady: http://developer.android.com/guide/topics/graphics/index.html grafika 3D OpenGL http://developer.android.com/training/graphics/opengl/index.html, K-16, 2017/2018 87 Intencje, K-16, 2017/2018 88 2018 Wszelkie prawa zastrzeżone 12
Intent intencje (wprowadzenie) Intencje Obiekty służące do przekazywania komunikatów do innych komponentów aplikacji (aktywność, serwis, Content provider, Broadcast Receiver), z prośbą o wykonanie czegoś. Na przykład: W celu uruchomienia innej aktywności z bieżącej aktywności Intent intent = new Intent(this, SignInActivity.class); intent.putextra(intent.extra_email, recipientarray); startactivity(intent); W celu uruchomienia serwisu, np. do ściągnięcia danych z internetu w tle W celu wysłania komunikatu do innej aplikacji, K-16, 2017/2018 89 Składniki intencji: Intencje opcjonalna nazwa komponentu (np. klasa aktywności do uruchomienia) akcja, np. ACTION_VIEW, ACTION_SEND dane, które mają zostać przekazane, zwykle adres URI i/lub ich typ MIME kategoria, pomaga wybrać właściwy komponent do obsługi intencji extras, czyli dodatkowe dane do przekazania, np. wartość, tekst itp. flagi dodatkowe informacje dla systemu Intencja bezpośrednia (explicite) odbiorca jest dokładnie zdefiniowany, np. aktywność do uruchomienia Intencja domniemana (implicite) odbiorca jest niezdefiniowany intencję obsłuży komponent, który posiada takie możliwości, jeśli istnieje, K-16, 2017/2018 90 2018 Wszelkie prawa zastrzeżone 13
Przykłady intencji Otwarcie mapy dla konkretnych współrzędnych Uri.parse("geo:0,0?q=%C5%81%C3%B3d%C5%BA+Stefanowskiego") geo:latitude,longitude np. "geo:47.6,-122.3" geo:latitude,longitude?z=zoom np. "geo:47.6,-122.3?z=11" (z = 1...23) geo:0,0?q=lat,lng(label) np. "geo:0,0?q=34.99,-106.61(treasure)" geo:0,0?q=my+street+address np. "geo:0,0?q=warszawa" Filtr intencji, K-16, 2017/2018 91 Aparat, K-16, 2017/2018 92 2018 Wszelkie prawa zastrzeżone 14
Aparat Klasa Camera (przestarzała) http://developer.android.com/guide/topics/media/camera.html i nowsza Camera2 (od wersji 21 - Lolipop) http://developer.android.com/samples/camera2basic/index.html http://www.androidhive.info/2013/09/android-working-with-camera-api/, K-16, 2017/2018 93 Aparat - uprawnienia, K-16, 2017/2018 94 2018 Wszelkie prawa zastrzeżone 15
Aparat - możliwości, K-16, 2017/2018 95 Aparat wyzwolenie intencji, K-16, 2017/2018 96 2018 Wszelkie prawa zastrzeżone 16
Aparat odbiór inf. zwrotnej public abstract boolean onactivityresult (int requestcode, int resultcode, Intent data) http://developer.android.com/reference/android/content/intent.html, K-16, 2017/2018 97 Aparat własna aplikacja http://developer.android.com/guide/topics/media/camera.html Części programu Sprawdzenie, czy aparat jest Dostęp do aparatu i jego możliwości Klasa podglądu na żywo (SurfaceView) Layout do podglądu Interfejs obsługujący zrobienie zdjęcia z odpowiednim nasłuchem Przechwycenie materiału i jego zapis Sprawdzenie, czy zapis się powiódł i zwolnienie aparatu., K-16, 2017/2018 98 2018 Wszelkie prawa zastrzeżone 17
Aparat klasa Camera2 CameraManager Zarządzanie wszystkimi aparatami urządzenia, sprawdzenie ich możliwości przez CameraCharacterstics class. CameraDevice Reprezentuje konkretny aparat, obiekt jest zwracany przez CameraManager. CaptureRequest Obsługuje żądanie wykonania zdjęcia. CameraCaptureSession Obsługuje proces robienia zdjęcia/nagrywania filmu. CameraCaptureSession.CaptureCallback Obsługuje wynik działania aparatu, zwraca podgląd z obiektywu, zapisuje zdjęcie itp., K-16, 2017/2018 99 Camera2 Uprawnienia: uses-permission - android.permission.camera - android.permission.write_external_storage uses-feature android.hardware.camera2.full Layout komponent TextureView do przekazywania obrazu z aparatu, K-16, 2017/2018 100 2018 Wszelkie prawa zastrzeżone 18