grafika 2D i animacja obsługa rotacji i elementy 3D-OpenGL w Androidzie



Podobne dokumenty
ANDROID. OpenGL ES 1.0. Tomasz Dzieniak

9. Rysowanie, animacje i podstawy grafiki 3D

Grafika trójwymiarowa

Programowanie Urządzeń Mobilnych. Laboratorium nr 11, 12

Rysowanie. Rysowanie - podstawy

akademia androida Składowanie danych część VI

Fragmenty są wspierane od Androida 1.6

Aktywności są związane z ekranem i definiują jego wygląd. Dzieje się to poprzez podpięcie do aktywności odpowiedniego widoku.

Systemy wirtualnej rzeczywistości. Komponenty i serwisy

akademia androida Service, BroadcastReceiver, ContentProvider część IV

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Laboratorium Systemów Mobilnych. Wykład 1

Systemy operacyjne na platformach mobilnych

Dynamiczne i wydajne tworzenie interfejsu. Piotr Michałkiewicz

Programowanie urządzeń mobilnych w systemie Android. Ćwiczenie 7 Wykorzystanie układu LinearLayout

Podstawy tworzenia aplikacji z wykorzystaniem języka Java ME ćwiczenia 2

STWORZENIE PRZYKŁADOWEJ

RESTful Android. Na co zwrócić uwagę przy tworzeniu aplikacji klienckich REST na Androidzie

Powiadomienia w systemie Android

Współbieżność w środowisku Java

Programowanie urządzeń mobilnych. dr inż. Juliusz Mikoda

Podstawowe elementy GUI - zadania

Android pierwsza aplikacja

[Android] Podstawy programowania

II Tworzenie klasy Prostokąt dziedziczącej z klasy wątku

Języki i metody programowania Java. Wykład 2 (część 2)

Programowanie w JAVA Lab. 5 - Wątki. 1. Wykorzystując metodę Monte Carlo narysować wykres funkcji oraz obliczyć całkę: 7 x ) xy, 8,8

Programowanie obiektowe

Tworzenie i wykorzystanie usług

Laboratorium 9 (Więcej Aktywności, w Androidzie)

Systemy operacyjne na platformach mobilnych

protected void onsaveinstancestate(bundle outstate); protected void onrestoreinstancestate(bundle savedinstancestate);

Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com

Instrukcja implementacji sterownika wirtualnego portu szeregowego dla systemu Android. Opracowanie: Elzab Soft sp. z o.o.

1 Atrybuty i metody klasowe

Druga aplikacja Prymitywy, alpha blending, obracanie bitmap oraz mały zestaw przydatnych funkcji wyświetlających własnej roboty.

dr Artur Bartoszewski dr Artur Bartoszewski - Aplikacje mobilne - Wykład

akademia androida Sensory część V Mobile Applications Developers

Systemy operacyjne na platformach mobilnych

Programowanie Urządzeń Mobilnych. Laboratorium nr 9,10

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

MonoGame. Wieloplatformowe gry w C# Mateusz Cicheński

Janusz Ganczarski. OpenGL Pierwszy program

Interfejsy w Java. Przetwarzanie równoległe. Wątki.

Życie aktywności Nawigując przez aplikacje poszczególne Aktywności przechodzą pomiędzy stanami. Dla przykładu gdy aktywność uruchamia się po raz

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Wsparcie dla różnych urządzeń. SDK pozwala przystosować aplikację do większości tych wypadków

Kurs WWW. Paweł Rajba.

Podstawy Processingu. Diana Domańska. Uniwersytet Śląski

INSTRUKCJA DO ĆWICZENIA 13. Animacja wielowątkowa w aplikacjach JME. Gra logistyczna.

Podstawowe elementy GUI - zadania

GLKit. Wykład 10. Programowanie aplikacji mobilnych na urządzenia Apple (IOS i ObjectiveC) #import "Fraction.h" #import <stdio.h>

Wysokopoziomowy silnik gier dla urządzeń mobilnych z systemem Android

Systemy operacyjne na platformach mobilnych

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Zatem standardowe rysowanie prymitywów wygląda następująco:

Obsługa SMS i telefonii

Dokumentacja do API Javy.

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

Programowanie obiektowe

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Programowanie obiektowe

Programowanie urządzeń mobilnych w systemie Android. Ćwiczenie 8 Wykorzystanie układu RelativeLayout

Wykorzystanie map i geolokalizacji

Multimedia JAVA. Historia

Enkapsulacja, dziedziczenie, polimorfizm

akademia androida Http i AsyncTask część VII

Layouty. Kilka layoutów

Programowanie obiektowe

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Klasy i obiekty cz II

Mobilne aplikacje multimedialne

Kurs WWW. Paweł Rajba.

Kurs programowania. Wykład 8. Wojciech Macyna

Klasy abstrakcyjne, interfejsy i polimorfizm

Aplikacje w Javie- wykład 11 Wątki-podstawy

Programowanie obiektowe

AndroidManifest.xml. Plik manifestu opisuje podstawowe charakterystyki aplikacji i definiuje jej komponenty.

Programowanie komputerów Wykład 6: Aplety Java

Aplikacje RMI Lab4

SWING c.d. przydatne narzędzia: JFileChooser, JOptionPane. drag'n drop, menu kontekstowe.

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Technologie i usługi internetowe cz. 2

Aplikacje RMI. Budowa aplikacji rozproszonych. Część 2.

I. Spis treści I. Spis treści... 2 II. Kreator szablonów Tworzenie szablonu Menu... 4 a. Opis ikon Dodanie nowego elementu...

Wstęp do JUNG. Omówione elementy wykorzystane w Edge Color Project

Systemy operacyjne na platformach mobilnych

Języki i metody programowania Java Lab2 podejście obiektowe

Programowanie w Internecie. Java

Wizualne systemy programowania. Wykład 11 Grafika. dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

PROJEKTOWANIE ABSTRAKCYJNEJ KLASY FIGURA PRZECHOWUJĄCEJ WSPÓLNE CECHY OBIEKTÓW GRAFICZNYCH

Platformy Programistyczne Podstawy języka Java

Laboratorium Systemów Mobilnych. Wykład 2

Obsługa grafiki w Delphi, rysowanie na płótnie, obsługa myszki, zapisywanie obrazków do plików, bitmapy pozaekranowe.

Programowanie obiektowe

Transkrypt:

grafika 2D i animacja obsługa rotacji i elementy 3D-OpenGL w Androidzie Krzysztof Czech, 2 rok IZ Grzegorz Duszyński, 2 rok IZ Daniel Engel, 2 rok IZ Łukasz Olech, 2 rok IZ Radek Wilczak, 2 rok EKA

Nadpisywanie elementów GUI Canvas - płótno Paint - rysik Paint paint = new Paint();

Rysowanie prymitywów public void drawcolor (int color) public void drawpaint (Paint paint) public void drawarc (RectF oval, float startangle, float sweepangle, boolean usecenter, Paint paint) public void drawcircle (float cx, float cy, float radius, Paint paint) public void drawline (float startx, float starty, float stopx, float stopy, Paint paint) public void drawrect (Rect r, Paint paint) public void drawtext (String text, float x, float y, Paint paint)

Przykład wykorzystania obiektów Canvas i Paint

Przykład wykorzystania obiektów Canvas i Paint cd.

Animacja Android oddaje nam do użytku 2 typy animacji: Tween animation Frame-by-frame animation

Deklaracja animacji Tween w XML

Implementacja animacji podpięcie jej pod Button

Animacja Frame by Frame reprezantacja w XML

Struktura plików w projekcie androida umieszczane plików i bitmap Zdjęcia dodane do folderów drawable zostają automatycznie konwertowane do optymalnej wielkości. W celu zachowania oryginalnego rozmiaru należy stworzyć inny katalog.

Implementacja animacji Frame by Frame i podłożenie jej pod Button Metoda post powoduje, że obiekt starter zostaje dodane do kolejki wątku działającego w ramach odświeżania GUI.

Tworzenie dynamicznych animacji tworzenie osobnego wątku przeciążanie klasy SurfaceView przeciążanie klasy Thread - tworzenie wątku

Przykładowa klasa SurfaceView

Android - Rotacja

Rotacja 1: Wtęp Zmiana orientacji telefonu usuwa naszą aktywność i stwarza ją na nowo za pomocą metody oncreate(). Dlatego należy pamiętać o zapamiętywaniu danych dynamicznych naszej Layout wertykalny: res/layout/main.xml Layout horyzontalny: res/layout-land/main.xml Link: http://www.bogotobogo.com/android/android15rotation. html

Rotacja 2: Sposoby Trzy podejścia do problemu przechowywania danych: 1. Metoda onsaveinstancestate() i obiekty typu Bundle ograniczenie pamięciowe do Boundle obiekty zapisywane muszą ulegać serializacji nadzór Androida 2. Metoda onretainnonconfigurationinstance() oraz getlastnonconfigurationinstance() i obiekt typu Object przechowywanie dowolnego obiektu - Object również nadzór Androida 3. Metoda onconfigurationchanged() zwolnienie Androida z obsługi obrotu ekranu całkowite przejęcie zdarzenia obrotu

Rotacja 3: DIY Rotation Jeżeli nie chcemy żeby android pomagał nam z obsługą naszej rotacji należy w pliku AndroidManifest.xml wstawić: android: configchanges= " orientation keyboardhidden" w <activity> W konsekwencji, zmiana orientacji spowoduje wywołanie metody onconfigurationchanged() którą należy przedefiniować.

Rotacja 4: Rezygnacja z obrotu W jaki sposób zablokować zmianę orientacji ekranu? Należy dodać do AndroidManifest.xml (w części dotyczącej aktywności naszej aplikacji) wpis: android:screenorientation = "portrait" - widok wertykalny "landscape" - widok horyzontalny "sensor" - orientacja ekranu zależna od położenia telefonu (domyślnie zmiana orientacji jest związana z wysunięciem/schowaniem klawiatury)

OpenGL ES 2.0 API do grafiki 3D w urządzeniach mobilnych

Czym jest OpenGL ES? Uniwersalne API do grafiki 3D w systemach wbudowanych Bazuje na OpenGL 3D Stworzony i nadzorowany przez Khronos group

Czym się wyróżnia wersja ES? W przeciwieństwie do wersji z PC: Nie ma wsparcia dla glbegin ani glend. Zamiast tego używa się vertex arrays i obiektów vertex buffer. Wspieranymi prymitywami są punkty, linie, trójkąty. Czworokąty nie są wspierane. Nie ma wsparcia dla listy wyświetlaczy.

Podstawy OpenGL ES 2.0 package com.droidnova.android.games.vortex; import android.app.activity; import android.os.bundle; public class Vortex extends Activity { // Tworzymy statyczny TAG do logowania private static final String LOG_TAG = Vortex.class.getSimpleName(); private VortexView _vortexview; // Ustawiamy widok dla aktywności @Override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); _vortexview = new VortexView(this); setcontentview(_vortexview); http://www.droidnova.com/android-3d-game-tutorial-part-i,312.html

Podstawy OpenGL ES 2.0 package com.droidnova.android.games.vortex; import android.content.context; import android.opengl.glsurfaceview; public class VortexView extends GLSurfaceView { private VortexRenderer _renderer; public VortexView(Context context) { super(context); // Tworzymy Renderer i ustawiamy go jako obowiązujący w widoku _renderer = new VortexRenderer(); setrenderer(_renderer); http://www.droidnova.com/android-3d-game-tutorial-part-i,312.html

Podstawy OpenGL ES 2.0 package com.droidnova.android.games.vortex; import... //Lista importów public class VortexRenderer implements GLSurfaceView.Renderer { private float _red = 0.9f; private float _green = 0.2f; private float _blue = 0.2f; @Override public void onsurfacecreated(gl10 gl, EGLConfig config) { @Override public void onsurfacechanged(gl10 gl, int w, int h) { gl.glviewport(0, 0, w, h); @Override public void ondrawframe(gl10 gl) { // Definiujemy kolor tła gl.glclearcolor(_red, _green, _blue, 1.0f); // Czyścimy bufor kolorów zdefiniowanym kolorem gl.glclear(gl10.gl_color_buffer_bit); http://www.droidnova.com/android-3d-game-tutorial-part-i,312.html

Podstawy OpenGL ES 2.0 // Dodajemy setcolor do renderera public void setcolor(float r, float g, float b) { _red = r; _green = g; _blue = b; // Dodajemy obsługę dotyku do widoku public boolean ontouchevent(final MotionEvent event) { queueevent(new Runnable() { public void run() { _renderer.setcolor(event.getx() / getwidth(), event.gety() / getheight(), 1.0f); ); return true; http://www.droidnova.com/android-3d-game-tutorial-part-i,312.html

OpenGL ES 2.0 Pierwsze prymitywy

// Dodaj do VortexRenderer private ShortBuffer _indexbuffer; private FloatBuffer _vertexbuffer; private short[] _indicesarray = {0, 1, 2; // Wskaźniki private int _nrofvertices = 3; // Trójkąt ma 3 wierzchołki private void inittriangle() { ByteBuffer vbb = ByteBuffer.allocateDirect(_nrOfVertices * 3 * 4); // l. wierz. * l. trójk. * l. bajtów vbb.order(byteorder.nativeorder()); //Big endian, Little endian _vertexbuffer = vbb.asfloatbuffer(); //Bufor wierzchołków ByteBuffer ibb = ByteBuffer.allocateDirect(_nrOfVertices * 2); ibb.order(byteorder.nativeorder()); _indexbuffer = ibb.asshortbuffer(); // Bufor indeksów float[] coords = { -0.5f, -0.5f, 0f, // (x1, y1, z1) 0.5f, -0.5f, 0f, // (x2, y2, z2) 0f, 0.5f, 0f // (x3, y3, z3) ; _vertexbuffer.put(coords); //Wypełnij bufor współrzędnymi _indexbuffer.put(_indicesarray); //Wypełnij bufor indeksami _vertexbuffer.position(0); //Ustaw wskaźnik wewnątrz buforu _indexbuffer.position(0);

@Override public void onsurfacecreated(gl10 gl, EGLConfig config) { // Przygotowujemy Trójkąty gl.glenableclientstate(gl10.gl_vertex_array); inittriangle(); @Override public void ondrawframe(gl10 gl) { // Ustawiamy kolor do czyszczenia buforu gl.glclearcolor(_red, _green, _blue, 1.0f); // Czyścimy nim bufor gl.glclear(gl10.gl_color_buffer_bit); // Ustawiamy kolor używany do rysowania gl.glcolor4f(0.5f, 0f, 0f, 0.5f); // Definiujemy wierzchołki do rysowania gl.glvertexpointer(3, GL10.GL_FLOAT, 0,_vertexBuffer); // Rysujemy wierzchołki gl.gldrawelements(gl10.gl_triangles, _nrofvertices, GL10.GL_UNSIGNED_SHORT, _indexbuffer);

// Ustaw kąt private float _angle; public void setangle(float angle) { _angle = angle; // Rysuj @Override public void ondrawframe(gl10 gl) { gl.glrotatef(_angle, 0f, 1f, 0f); // Dokonujemy rotacji gl.glcolor4f(0.5f, 0f, 0f, 0.5f); // Kolor początkowy //Obsługa dotyku publuic boolean ontouchevent(final MotionEvent event) { queueevent(new Runnable() { public void run() { _renderer.setcolor(event.getx() / getwidth(), event.gety() / getheight(), 1.0f); _renderer.setangle(event.getx() / 10); ); return true;