Ho bisogno di ripassarlo.
Ecco il codice che ho ritrovato, e che salvo:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RelativeLayout mainLayout=(RelativeLayout)findViewById(R.id.mainLayout);
View v=new CustomView(this);
mainLayout.addView(v);
v.getLayoutParams().width=300;
v.getLayoutParams().height=300;
}
public class CustomView extends View{
private Paint paint;
public CustomView(Context context) {
super(context);
paint=new Paint();
paint.setStyle(Style.STROKE);
paint.setStrokeWidth(50);
paint.setColor(Color.GREEN);
}
@Override
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
canvas.drawCircle(100, 100, 100, paint);
}
}
}
Viene creata una View.Ne creo il costruttore:
public class MiaView extends View{
public MiaView(Context context){
super(context);
}
}
e poi bisogna implementare il metodo onDraw:
@Override
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
}
E in questo si mette la funzione per disegnare qualcosa:
@Override
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
canvas.drawCircle(100, 100, 50, paint);
}
ma ottengo un errore per il fatto che non ho mai dichiarato la variabile paint.Devo farlo all'inizio, come variabile della view.
public class MiaView extends View{
Paint paint;
public MiaView(Context context){
super(context);
}
@Override
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
canvas.drawCircle(100, 100, 50, paint);
}
}
Ma devo stabilire le caratteristiche di questo paint nel costruttore.Il paint sarebbe un po' il pennello.
Proviamo:
Paint paint;
public MiaView(Context context){
super(context);
paint=new Paint();
paint.setColor(Color.RED);
paint.setStrokeWidth(10);
paint.setStyle(Style.STROKE);
}
Vediamo cosa viene fuori.Riscrivo il tutto...
public class Immagine extends View{
Paint paint;
public Immagine(Context context) {
super(context);
paint.setStyle(Style.STROKE);
paint.setColor(Color.RED);
paint.setStrokeWidth(10);
}
@Override
public void onDraw(Canvas canvas){
super.onDraw(canvas);
canvas.drawCircle(100, 100, 50, paint);
}
}
Facciamo gli aggiustamenti e andiamo...
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RelativeLayout mainLayout=(RelativeLayout)findViewById(R.id.mainLayout);
Immagine mImmagine=new Immagine(this);
mainLayout.addView(mImmagine);
mImmagine.getLayoutParams().width=300;
mImmagine.getLayoutParams().height=300;
}
public class Immagine extends View{
Paint paint;
public Immagine(Context context) {
super(context);
paint=new Paint();
paint.setStyle(Style.STROKE);
paint.setColor(Color.RED);
paint.setStrokeWidth(10);
}
@Override
public void onDraw(Canvas canvas){
super.onDraw(canvas);
canvas.drawCircle(100, 100, 50, paint);
}
}
}
Dopo una bella schiera di NullPointerException debitamente corrette, siamo arrivati a farlo funzionare, e a tracciare un cerchio rosso.Teniamo presenti le finalità immediate, e creiamo un cerchio più grande e dal bordo più sottile...
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RelativeLayout mainLayout=(RelativeLayout)findViewById(R.id.mainLayout);
Immagine mImmagine=new Immagine(this);
mainLayout.addView(mImmagine);
mImmagine.getLayoutParams().width=LayoutParams.MATCH_PARENT;
mImmagine.getLayoutParams().height=LayoutParams.MATCH_PARENT;
}
public class Immagine extends View{
Paint paint;
public Immagine(Context context) {
super(context);
paint=new Paint();
paint.setStyle(Style.STROKE);
paint.setColor(Color.RED);
paint.setStrokeWidth(1);
}
@Override
public void onDraw(Canvas canvas){
super.onDraw(canvas);
canvas.drawCircle(200, 200, 200, paint);
}
}
}
Tracciamo il raggio orizzontalmente...Di base, ho la lunghezza del raggio.
Conosco il punto di partenza, che corrisponde al centro della circonferenza.
Conosco l'angolo.
Ora, la differenza fra la coordinata finale X e quella iniziale X è pari al seno dell'angolo per la lunghezza, mentre la differenza fra la coordinata finale Y e quella iniziale Y è pari al coseno dell'angolo per la lunghezza.
Ecco:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RelativeLayout mainLayout=(RelativeLayout)findViewById(R.id.mainLayout);
Immagine mImmagine=new Immagine(this);
mainLayout.addView(mImmagine);
mImmagine.getLayoutParams().width=LayoutParams.MATCH_PARENT;
mImmagine.getLayoutParams().height=LayoutParams.MATCH_PARENT;
}
public class Immagine extends View{
Paint paint;
public Immagine(Context context) {
super(context);
paint=new Paint();
paint.setStyle(Style.STROKE);
paint.setColor(Color.BLACK);
paint.setStrokeWidth(3);
}
@Override
public void onDraw(Canvas canvas){
super.onDraw(canvas);
float centroX=200;
float centroY=200;
float radius=200;
float angle=30;
canvas.drawCircle(centroX, centroY, radius, paint);
canvas.drawLine(centroX, centroY, (float)(centroX+radius*Math.cos(Math.toRadians(angle))), (float)(centroY+radius*Math.sin(Math.toRadians(angle))), paint);
}
}
}

Nessun commento:
Posta un commento