• Programmazione Android
  • CORSI ONLINE
  • Web Agency

Logo

Corsi di programmazione web e mobile online
Navigation
  • Home
  • CORSI ONLINE
  • Tutorial Pratici
  • GUIDE COMPLETE
    • Corso completo di C
    • Corso videogame con Cocos2d
    • Programmazione Cocoa Touch
  • Sezioni
    • Libri e manuali
    • Tips & Tricks
    • Risorse utili
    • Strumenti di Sviluppo
    • Materiale OpenSource
    • Framework
    • Guide Teoriche
    • Guide varie
    • Grafica e Design
    • iPad
    • News
    • Video Tutorial
    • Windows Phone
  • Pubblicità
  • About
    • Chi siamo
    • Pubblicazioni
    • Collabora
    • Sostieni devAPP

Android, disegnare con i Canvas

By Giuseppe Maggi | on 6 Novembre 2017 | 0 Comment
Android
Android Tutorial

Nella programmazione Android, siamo abituati a vedere le immagini come dei contenuti statici, collocati nella cartella delle risorse Drawable. In alcuni casi, però può rivelarsi utile disegnarle dinamicamente tramite codice Java. Quello che ci serve è una sorta di foglio su cui poter imprimere delle forme geometriche in base alle nostre configurazioni: tutto ciò esiste e passa sotto il nome di Canvas.
In questo esempio, illustreremo l’utilizzo di un Canvas disegnando su una Bitmap per poi utilizzarla come contenuto di una ImageView.
Il layout dell’app è il seguente:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp">
    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/immagine"/>
</RelativeLayout>

Nel metodo onCreate dell’Activity, dopo aver recuperato il riferimento all’ImageView, chiediamo un Canvas per poter disegnare una nostra immagine. Supponiamo che il nostro scopo sia quello di avere uno sfondo blu ed un cerchio giallo in posizione centrale, quello che ci serve è:

  • richiedere un oggetto Bitmap che costituirà il nostro prodotto finale. Nell’impostazione diremo di quanti punti vogliamo che sia composto sia orizzontalmente che verticalmente;
  • costruiamo un Canvas che usi come base di lavoro la Bitmap appena istanziata;
  • istanzieremo un Paint che costituisce lo strumento di disegno sul Canvas;
  • disporremo che il Canvas disegni sulla Bitmap le forme che vorremo utilizzando i parametri da noi passati di volta in volta ed il Paint configurato.
  • assegneremo la Bitmap come contenuto della ImaView posizionata nel layout.

Android disegnare forme geometriche con i Canvas

Questo il codice per fare apparire sfondo e cerchio che desideriamo:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

ImageView img= (ImageView) findViewById(R.id.immagine);

// 1. preparazione Bitmap
Bitmap bmp=Bitmap.createBitmap(400, 400, Bitmap.Config.ARGB_8888);

// 2. istanziamo Canvas basato sulla Bitmap
Canvas canvas=new Canvas(bmp);

// 3. assegniamo sfondo blu al Drawable
canvas.drawColor(Color.BLUE);

// 4. per disegnare il cerchio, abbiamo bisogno di un Paint
Paint paint=new Paint();

// 5. il Paint userà il colore giallo
paint.setColor(Color.YELLOW);

// 6. usando il Paint disegniamo un cerchio nella Drawable
canvas.drawCircle(200,200, 100, paint);

// 7. la Bitmap disegnata con il Canvas diventa il contenuto della ImageView
img.setImageBitmap(bmp);
}

Dalla righe di codice appena viste, notiamo che il Paint non serve per assegnare un colore di sfondo alla Bitmap mentre ha un ruolo indispensabile per definire il tratto con cui il Canvas disegnerà.
Il Canvas possiede molti metodi di cui drawCircle è quello definito per il disegno di un cerchio. Le coordinate utilizzate sono rapportate al sistema di punti (400X400) che abbiamo posto alla base del nostro Bitmap. Per questo motivo, la coppia di coordinate ascissa e ordinata che rappresentano il centro del cerchio (valgono entrambe 200) costituiranno anche il centro dell’area a disposizione. Il raggio del cerchio sarà invece di 100 punti.
Per assegnare la nuova immagine all’ImageView, basterà utilizzare il riferimento al Drawable senza chiedere alcuna elaborazione al Canvas o ad altro oggetto.
Per arricchire l’immagine di nuovi tratti, si dovrà eventualmente riconfigurare il Paint.

Android disegnare forme geometriche con i Canvas
Ad esempio, per aggiungere un cerchio celeste più piccolo sopra quello giallo avremo bisogno del seguente codice:

paint.setColor(Color.CYAN);
canvas.drawCircle(200,200, 50, paint);

Si presti attenzione che le immagini sono realizzate in sequenza perciò invertendo i comandi che disegnano i cerchi (mettendo, quindi, prima quello più piccolo e poi quello più grande) vedremmo apparire solo il secondo in quanto risulterebbe sovrapposto al primo.

Per il disegno di linee, si usa analogamente il metodo drawLine al quale passeremo due coppie di coordinate rappresentanti gli estremi del segmento.


Ad esempio, per avere una linea di colore verde e spessore di 5 punti, che tagli il Drawable dall’angolo in altro a sinistra (coordinate: x=0 e y=0) a quello in basso
a destra (coordinate: x=400 e y=400) dovremo utilizzare le seguenti righe di codice Java:

paint.setColor(Color.GREEN);
paint.setStrokeWidth(5);
canvas.drawLine(0,0,400,400, paint);

L’intuitività dell’uso delle coordinate in questi metodi nonché il loro formato numerico permettono di utilizzarli in maniera più dinamica come il seguente ciclo che offre una sorta di piccolo esercizio geometrico:

for(int i=0;i<400;i+=20)
{
   canvas.drawLine(i,0,400,i, paint);
   canvas.drawLine(400,i,400-i,400, paint);
   canvas.drawLine(400-i,400,0,400-i, paint);
   canvas.drawLine(0,400-i,i,0, paint);
}

Da ogni lato partiranno linee consecutive che raggiungeranno il lato adiacente. L’intreccio di tali forme comporrà il disegno visibile in figura:

Conclusioni

I Canvas offrono la possibilità di scendere un pò più in profondità rispetto all’alto livello cui è abituato il programmatore. Con questi elementi riusciamo a gestire delle immagini da vicino ma con la comodità di tanti metodi intuitivi messi a disposizione dalla classe Canvas.

Ora tocca a voi: provate ad utilizzarli e fateci sapere cosa ne pensate.

Alla prossima!

Share this story:
  • tweet

Tags: androidbitmapcanvasTutorial Pratici

Recent Posts

  • Parte il percorso programmatori iOS in Swift su devACADEMY.it

    20 Dicembre 2017 - 0 Comment
  • Android, crittografare dati velocemente con Encryption

    24 Settembre 2018 - 0 Comment
  • Sql2o, accesso immediato ai database tramite Java

    3 Settembre 2018 - 0 Comment
  • Okio, libreria per ottimizzare l’input/output in Java

    27 Agosto 2018 - 0 Comment

Related Posts

  • IntelliJ IDEA: IDE per programmare in Java e Kotlin

    25 Luglio 2018 - 0 Comment
  • Android: usare Connect Pattern

    10 Luglio 2018 - 0 Comment
  • Android: il metodo findViewById() non richiede più il cast

    21 Giugno 2018 - 0 Comment

Author Description

No Responses to “Android, disegnare con i Canvas”

Leave a Reply

Your email address will not be published. Required fields are marked *


*
*

Corso online di programmazione android e java

SEZIONI

  • Android
  • Comunicazioni
  • Contest
  • Corsi ed Eventi
  • Corso completo di C
  • Corso programmazione videogiochi
  • Framework
  • Grafica e Design
  • Guida rapida alla programmazione Cocoa Touch
  • Guide Teoriche
  • Guide varie
  • iPad
  • Le nostre applicazioni
  • Libri e manuali
  • Materiale OpenSource
  • News
  • Pillole di C++
  • Progetti completi
  • Risorse utili
  • Strumenti di Sviluppo
  • Swift
  • Tips & Tricks
  • Tutorial Pratici
  • Video Tutorial
  • Windows Phone

Siti Amici

  • Adrirobot
  • Allmobileworld
  • Apple Notizie
  • Apple Tribù
  • Avvocato360
  • Blog informatico 360°
  • bubi devs
  • fotogriPhone
  • GiovaTech
  • iApp-Mac
  • iOS Developer Program
  • iPodMania
  • MelaRumors
  • Meritocracy
  • SoloTablet
  • TecnoUser
  • Privacy & Cookie Policy
©2009-2018 devAPP - All Rights Reserved | Contattaci
devAPP.it è un progetto di DEVAPP S.R.L. - Web & Mobile Agency di Torino
Str. Volpiano, 54 - 10040 Leini (TO) - C.F. e P.IVA 11263180017 - REA TO1199665 - Cap. Soc. € 10.000,00 i.v.

devACADEMY.it

Vuoi imparare a programmare?

Iscriviti e accedi a TUTTI i corsi con un’unica iscrizione.
Oltre 70 corsi e migliaia di videolezioni online e in italiano a tua disposizione.

ISCRIVITI SUBITO