Il passo fondamentale è overridare onDraw.
Però prima bisogna fare una distinzione.
- Cosa disegnare (Canvas);
- Come disegnare (Paint).
Vediamo se per istanziare un oggetto della classe Paint è sufficiente un costruttore senza parametri:
Paint paint=new Paint();Non ottengo segnalazioni di errore, e per ora ci siamo.
Quindi attribuisco delle proprietà a questo Paint.
Paint paint=new Paint(); paint.setStyle(Paint.Style.STROKE); paint.setColor(Color.RED);...forse può bastare.
Ora si overridda onDraw, con Canvas per parametro, come si overridda qualunque metodo.
Ma un'activity non ha come metodo onDraw...
Creo una classe che estende View.
public class Immagine extends View { }Mi viene fatta la richiesta del costruttore...
public class Immagine extends View { public Immagine(Context context) { super(context); } }Mi conviene quindi istanziare Paint nel costruttore:
public class Immagine extends View { public Immagine(Context context) { super(context); Paint paint=new Paint(); } }E quindi ricominciare il discorso dell'overriddare onDraw.
@Override protected void onDraw(Canvas canvas){ super.onDraw(canvas); }Rimetto le proprietà al Paint:
Paint paint=new Paint(); paint.setStyle(Paint.Style.STROKE); paint.setColor(Color.RED);E ora vediamo se possiamo disegnare qualcosa integrando onDraw: scopro che devo usare nuovamente l'oggetto paint istanziato, e visto che mi trovo in un'altra funzione devo mettere la variabile di questa all'inizio della classe.
@Override protected void onDraw(Canvas canvas){ super.onDraw(canvas); canvas.drawCircle(100,100,50,paint); } }E vediamo...
Istanzio una view della mia classe:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Immagine immagine=new Immagine(this); } }e poi vado...
Bene: non succede niente!
Credo di aver dimenticato qualcosa...
Ecco, sì, ho dimenticato di aggiungere la View al RelativeLayout.
Chiamando questo mainLayout, otteniamo:
public class MainActivity extends AppCompatActivity { RelativeLayout mainLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mainLayout = (RelativeLayout)findViewById(R.id.mainLayout); Immagine immagine=new Immagine(this); mainLayout.addView(immagine); } }E adesso funziona: ho un cerchio rosso sulla mia activity.
Nessun commento:
Posta un commento