JavascriptProva

sabato 16 luglio 2016

Disegno di cerchio e raggio su display.

Come si fa a disegnare?
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