Android. Custom View.

Documenti analoghi
Mobile Programming. Prova scritta del 05/02/2016. Prof. De Prisco. Corso di laurea in Informatica

Grafica Android Mobile Programming Prof. R. De Prisco

Android. Android01: Introduzione alle Activity.

Mobile Programming. Prova scritta del 07/04/2016. Prof. De Prisco. Corso di laurea in Informatica

Corso di programmazione di sistemi mobile 1. Android Laboratorio. Activity, ListView e Adapter

Programmazione. Android

Android. Google Maps v2.

ProgettAzione tecnologie in movimento - V anno Unità 4 - Applicazioni per i sistemi mobili

Lezione 6 Gestione degli eventi dei widget

Programmazione ad oggetti

Android. Layout.

Programmazione orientata agli oggetti. Ivan Lanese

La classe java.lang.object

Esempi di programmazione

Corso Base. Lezione 3. Maurizio Cozzetto, Francesco Sarasini

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

Esercitazione. Docente Ing. Mariateresa Celardo

Mobile Programming. Prova scritta del 10/02/2017. Prof. De Prisco. Corso di laurea in Informatica

Proprietà delle Classi e degli Oggetti in Java

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas

Programmazione orientata agli oggetti Classi astratte e interfacce

Implementazione Java di un ADT

Uguaglianza e copia di oggetti

Sistemi Mobili e Wireless Android Selection widget e adapter

Linguaggi di Programmazione II Matricole con le due ultime cifre dispari

Mobile Programming. Prova scritta del 22/01/2016. Prof. De Prisco. Corso di laurea in Informatica

Modulo 4: Ereditarietà, interfacce e clonazione

Polimorfismo parametrico vs polimorfismo per inclusione

Corso sul linguaggio Java

Riassunto: cos è la OOP? classi astratte, interfacce, classi interne. Scaletta. Figura con area()? Figura senza area()? Stefano Mizzaro 1.

OCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

18 - Classi parzialmente definite: Classi Astratte e Interfacce

Programmazione a Oggetti Modulo B

Fondamenti di Informatica T-1. Costruttori Ereditarietà

Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I)

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Esempi in Java di program.ne O-O

Alberi Binario in Java

La programmazione ad oggetti (OOP)

MOBILE WEB DESIGN TUTORIAL ANDROID METAIO AUGMENTED REALITY

Io sono il tipo enumerativo TipoDirezione e rappresento l intera casa Io sono al terzo piano e valgo 3 ma se mi

Pag. 1/8. Esercizi lezione 4. Esercizio A

LE TABELLE. Le liste permettono di avere una sequenza di righe In alcune applicazioni è però necessario visualizzare le informazioni anche in colonne

SOLUZIONE. Requisiti. Requisiti (cont.) Requisiti (cont.) Sapienza - Università di Roma Facoltà di Ingegneria

Interfacce tattili. Gestire input multi-touch. Università di Napoli Federico II

Esercitazione Google Maps

Strutture dati. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05

ESERCIZI JAVA. Esercizi sulle Interfacce. Esercizio 1:

layout senza tabelle Posizionamento con i CSS Ad ogni elemento HTML corrisponde un area rettangolare, detta box Contenuto

Sul pattern Iterator

OCA JAVA 8 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

Fondamenti di Informatica T2 Modulo 2. Corso di Laurea in Ingegneria Informatica Anno accademico 2008/2009. Enumerativi

Esonero del corso di Programmazione a Oggetti

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

CATTURARE UNA SCHERMATA

Esempio: Ogni colonna può contenere un solo tipo di dati. Colonne e righe sono numerate partendo da zero. L Header non conta nella numerazione:

Android lezione 9 Le listview

Creare una gif animata con GIMP!

Introduzione al C++ (continua)

Implementazione dell albero binario in linguaggio C++

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e polimorfismo

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Programmazione II Compitino (Vers. B)

Corso Base. Lezione 4. Maurizio Cozzetto, Francesco Sarasini

Alberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione

C: panoramica. Violetta Lonati

Algoritmi di Ricerca. Esempi di programmi Java

Esercitazione n 3. Obiettivi

Programmazione orientata agli oggetti Ereditarietà

Strutture Dati. Elisa Marengo. Università degli Studi di Torino Dipartimento di Informatica. Elisa Marengo (UNITO) Strutture Dati 1 / 16

Concorrenza e sincronizzazione

Algoritmi di Ricerca. Esempi di programmi Java

Progettazione del Software

Applicando lo stesso meccanismo al tipo puntatore, possiamo dichiarare un array di puntatori:

3. un metodo che restituisce l elenco delle matricole di tutti gli studenti del corso;

Classi astratte. Nella gerarchia delle classi, potrebbe essere utile prevedere un supertipo generale per le classi che si usano. Ad esempio: Figura

Ereditarietà. Ereditarietà. Ereditarietà. Ereditarietà

Laboratorio Progettazione Web Le funzioni in PHP. Angelica Lo Duca IIT-CNR 2012/2013

Esonero del corso di Programmazione a Oggetti

strumento Crea rettangoli

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

Alberi e alberi binari I Un albero è un caso particolare di grafo

Sistemi Mobili e Wireless Android Action bar e menu

La geolocalizzazione

Mobile Programming. Prova scritta del 28/01/2015. Prof. De Prisco. Corso di laurea in Informatica

Variabili e Metodi di classe Interfacce e Package Gestione di File in Java

Programmazione con Java

Corso di Informatica

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Esercitazione n 3. Capacità di analisi e di estensione di progetti esistenti Linguaggio Java:

Eccezioni Precisazioni e approfondimenti

Esercitazione n 2. Obiettivi

Esempio: Interfacce. Gioco Interfacce

Prova d Esame Compito A

Esempio: Tombola! Vogliamo progettare una applicazione che realizza il gioco della tombola Versione semplificata: un banco, un

14 - Metodi e Costruttori

Esempio: Interfacce. Gioco Interfacce

Esercitazione sui Design Pattern. lunedì 29 aprile 13

Introduzione ai puntatori

Ereditarietà (ultima)

Transcript:

Android Custom View diegozabot@yahoo.it

Creazione di una Custom View (1) La classe View è la classe madre di tutti i componenti visuali di Android. Ogni sottoclasse implementa il metodo ondraw(canvas) responsabile del disegno della componente. Procediamo come segue: 1. creare una nuova classe estendendo View 2. implementare un costruttore 3. fare l override del metodo ondraw( ) 4. impostare la View come vista della Activity 5. nel caso serva, implementare l ontouch

Creazione di una Custom View (2) 1. Creare una nuova classe estendendo View e dichiarare gli attributi che servono all'interno della View: public class MyView extends View{ private float x,y; private float raggio; private Paint p; In questo esempio vogliamo disegnare un cerchio, quindi dichiariamo due variabili per il centro, un raggio e un oggetto di classe Paint (utilizzato per il disegno).

Creazione di una Custom View (3) 2. Implementare un costruttore che inizializza gli attributi: public MyView(Context context) { super(context); p=new Paint(); p.setantialias(true); p.setcolor(color.blue); x=100; y=200; raggio=100; Inizializzo l'oggetto di classe Paint per poter disegnare in blu e assegno un valore iniziare al centro e al raggio del cerchio.

Creazione di una Custom View (4) 3. Effettuare l'override del metodo ondraw: protected void ondraw(canvas canvas) { super.ondraw(canvas); canvas.drawcolor(color.black); canvas.drawcircle(x, y, raggio, p); Utilizzo dei metodi della classe Canvas per impostare il colore di sfondo e disegnare un cerchio.

Creazione di una Custom View (5) 4. Impostare la view come vista della activity: public class MainActivity extends Activity { @Override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(new MyView(this));

Creazione di una Custom View (6) 5. Eventualmente implementiamo il metodo ontouchevent: public boolean ontouchevent(motionevent event) { // istruzioni return super.ontouchevent(event); Possiamo utilizzare event.getx() ed event.gety() per ricavare il punto di touch sullo schermo e mediante event.getaction() l'azione effettuata che può essere: MotionEvent.ACTION_DOWN MotionEvent.ACTION_UP MotionEvent.ACTION_MOVE

Creazione di una Custom View (6) Quindi nell'esempio faremo disegnare un nuovo cerchio al tocco: public boolean ontouchevent(motionevent event) { switch(event.getaction()){ case MotionEvent.ACTION_DOWN: x=event.getx(); y=event.gety(); break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_MOVE: invalidate(); // forza il ridisegno della view return true; // abbiamo gestito l'evento Spostiamo il cerchio solo quando tocchiamo lo schermo.

Esercizio CustomView Creare una view che ad ogni tocco genera 100 cerchi blu con dimensioni, posizioni e alpha channel differenti.

Nascondere StatusBar e TitleBar Una applicazione Android solitamente riserva dello spazio nella parte alta dello schermo per la Taskbar (o statusbar) e la Titlebar. Per eliminarle e avere la view a schermo intero: protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); // elimina la titlebar requestwindowfeature(window.feature_no_title); // elimina la statusbar getwindow().setflags(windowmanager.layoutparams.flag_fullscreen, WindowManager.LayoutParams.FLAG_FULLSCREEN); setcontentview(new MyView(this)); * Attenzione: eliminanto la statusbar, l utente non vede le notifiche di sistema

CustomView da xml Nel caso in cui vogliamo utilizzare la nostra View impostando i parametri da xml, dobbiamo utilizzare un altro costruttore della Custom, quello che riceve anche gli attributi di layout: public MyView(Context context, AttributeSet attrs) { super(context, attrs); Se nella palette di oggetti ci spostiamo nel cassetto Custom & Library Views e diamo refresh, potremmo trovare la nostra View che possiamo personalizzare da xml.

Caricare una bitmap La classe BitmapFactory possiede un metodo statico chiamato decoderesource. Come primo argomento gli passiamo un puntatore alle risorse (mediante il metodo getresources) e come secondo argomento l id dell immagine. Bitmap b=bitmapfactory.decoderesource(getresources(), R. drawable.ic_launcher); Per disegnarla utilizziamo il metodo drawbitmap di Canvas (quindi nel metodo ondraw). drawbitmap vuole la bitmap, la posizione e un oggetto Paint (che ora non utilizzeremo): canvas.drawbitmap(b, x, y, null);

Esercizio CustomView Esercizio 1: Spostare una immagine in maniera automatica per il canvas, facendo attenzione a non farla uscire dai limiti. Esercizio 2: Creare due zone di touch a destra e sinistra del canvas da usare come controllo per far spostare una immagine a destra e a sinistra.

Definire un hot-spot (1) In una View custom possiamo definire alcune zone sensibili al tocco. Solitamente sono zone rettangolari, contraddistinte da un punto di origine (top, left) e un punto di termine (bottom, right). Per questo motivo possiamo utilizzare la classe Rect per definire una zona rettangolare mediante interi (o RectF se le coordinate sono float). Rect zona1=new Rect(top, left, bottom, right); Uno dei metodi della classe Rect è contains(x, y) che ritorna vero o falso a seconda se il punto (x,y) è contenuto nella zona rettangolare.

Definire un hot-spot (2) L oggetto Rect può essere utilizzato sia per disegnare una immagine direttamente in una zona che per rilevare una pressione (touch) nella zona stessa. Esempio: Bitmap b; Rect zona1; public MyView(Context context) { super(context); b = BitmapFactory.decodeResource( getresources(), R.drawable.ic_launcher); zona1 = new RectF(100, 100, 100 + b.getwidth(), 100 + b.getheight()); Definisco una zona che contiene l immagine ma traslata di (100,100) dall origine

Definire un hot-spot (3) Per disegnare l immagine usiamo un metodo drawbitmap differente Canvas.drawBitmap(Bitmap b, Rect source, Rect dest, Paint paint); Disegnamo la bitmap (o la parte delimitata da source) dentro dest. protected void ondraw(canvas canvas) { super.ondraw(canvas); canvas.drawcolor(color.black); canvas.drawbitmap(b, null, zona1, null); La zona rettangolare può anche essere disegnata con il metodo drawrect di Canvas: canvas.drawrect(zona1, paint);

Definire un hot-spot (4) Per rilevare il touch sulla zona, utilizziamo il metodo contains in ontouch: public boolean ontouch(motionevent event) { switch(event.getaction( )){ case MotionEvent.ACTION_UP: if( zona1.contains(event.getx(), event.gety()) // abbiamo toccato la zona, fare qualcosa break; Se dobbiamo rilevare più zone di touch su una View Custom, può esser comodo istanziare un array di Rect che definiscono gli hot-spot.