Note that there are some explanatory texts on larger screens.

plurals
  1. POAdd a button (spinner) in this code
    text
    copied!<p>I have this code. I define a new class "diagrama" extends View in which i draw somethings.</p> <p>I want to add a button (specially a spinner button) in the bottom of the screen, but i don't know how.</p> <p>I'm trying to make a state machine, pressing two "states" and then, link them with a line. I want to appear in each line the input and output with text. </p> <p>I have tried to make a AlertBuild for select the input and output (it is commented), but i didn't succed. I want to create two spinners buttons for select the input and output.</p> <p>I'm starting and this app is not fine, but i'm stuck in this and i can't continue. </p> <p>If someone can help me, i would appreciate.</p> <p>Thank you.</p> <pre><code>import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Paint.Style; import android.graphics.Path; import android.graphics.RectF; import android.os.Bundle; import android.view.Gravity; import android.view.Menu; import android.view.MotionEvent; import android.view.View; import android.widget.Button; public class MainActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new diagrama(this)); //creo el layout "diagrama" desde java y no desde xml } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } public class diagrama extends View{ //coordenadas x y en el momento en el que tocas la pantalla float x=0; float y=0; float x_origen,y_origen,x_destino,y_destino; //coordenadas de los centros de cada círculo float x_S0=160, y_S0=100, x_S1=260, y_S1=200, x_S2=160, y_S2=200, x_S3=160, y_S3=300, x_S4=60, y_S4=200, radio=20, radio_ovalo=100; int contador=0, //contador de las 2 bolas pulsadas contador_lineas=0, //contador de número de flechas dibujadas i=0; String accion="accion"; //acción para cuando pulsas un círculo que se coloree en rojo String text; Path path= new Path(); //path para crear flechas public diagrama (Context context) { super(context); } //Método para dibujar @Override protected void onDraw(Canvas canvas){ //Creamos el pincel con el que vamos a dibujar Paint pincel = new Paint(); pincel.setColor(Color.BLACK); pincel.setStrokeWidth(2); pincel.setStyle(Style.STROKE); //Creamos el camino del ovalo principal final RectF ovalo_principal = new RectF(); ovalo_principal.set(x_S2-radio_ovalo, y_S2-radio_ovalo, x_S2+radio_ovalo, y_S2+radio_ovalo); //Creamos el camino del ovalo de la izquierda final RectF ovalo_izquierda = new RectF(); ovalo_izquierda.set(x_S4-((3*radio_ovalo)/2), y_S4-((3*radio_ovalo)/2), x_S4+((3*radio_ovalo)/2), y_S4+((3*radio_ovalo)/2)); //Creamos el camino del ovalo de la derecha final RectF ovalo_derecha = new RectF(); ovalo_derecha.set(x_S1-((3*radio_ovalo)/2), y_S1-((3*radio_ovalo)/2), x_S1+((3*radio_ovalo)/2), y_S1+((3*radio_ovalo)/2)); //Creamos el camino del ovalo superior derecha final RectF ovalo_superior_derecha = new RectF(); ovalo_superior_derecha.set(x_S1-radio_ovalo, y_S1-100-radio_ovalo, x_S1+radio_ovalo, y_S1-100+radio_ovalo); //Creamos el camino del ovalo superior izquierda final RectF ovalo_superior_izquierda = new RectF(); ovalo_superior_izquierda.set(x_S4-radio_ovalo, y_S4-100-radio_ovalo, x_S4+radio_ovalo, y_S4-100+radio_ovalo); //Creamos el camino del ovalo inferior izquierda final RectF ovalo_inferior_izquierda = new RectF(); ovalo_inferior_izquierda.set(x_S4-radio_ovalo, y_S4+100-radio_ovalo, x_S4+radio_ovalo, y_S4+100+radio_ovalo); //Creamos el camino del ovalo inferior derecha final RectF ovalo_inferior_derecha = new RectF(); ovalo_inferior_derecha.set(x_S1-radio_ovalo, y_S1+100-radio_ovalo, x_S1+radio_ovalo, y_S1+100+radio_ovalo); //Creamos el camino del ovalo pequeño superior final RectF ovalo_pequeño_superior = new RectF(); ovalo_pequeño_superior.set(x_S0-(radio_ovalo/2)+radio, y_S0+50-(radio_ovalo/2)+radio, x_S0+(radio_ovalo/2)-radio, y_S0+50+(radio_ovalo/2)-radio); //Creamos el camino del ovalo pequeño inferior final RectF ovalo_pequeño_inferior = new RectF(); ovalo_pequeño_inferior.set(x_S0-(radio_ovalo/2), y_S0+150-(radio_ovalo/2), x_S0+(radio_ovalo/2), y_S0+150+(radio_ovalo/2)); //Creamos el camino del ovalo pequeño derecha final RectF ovalo_pequeño_derecha = new RectF(); ovalo_pequeño_derecha.set(x_S4+150-(radio_ovalo/2), y_S4-(radio_ovalo/2), x_S4+150+(radio_ovalo/2), y_S4+(radio_ovalo/2)); //Creamos el camino del ovalo pequeño derecha final RectF ovalo_pequeño_izquierda = new RectF(); ovalo_pequeño_izquierda.set(x_S4+50-(radio_ovalo/2), y_S4-(radio_ovalo/2), x_S4+50+(radio_ovalo/2), y_S4+(radio_ovalo/2)); //Creamos el camino del ovalo inferior final RectF ovalo_inferior = new RectF(); ovalo_inferior.set(x_S3-((float) Math.sqrt((radio_ovalo*radio_ovalo)+(radio_ovalo*radio_ovalo))), y_S3-((float)Math.sqrt((radio_ovalo*radio_ovalo)+(radio_ovalo*radio_ovalo))), x_S3+((float)Math.sqrt((radio_ovalo*radio_ovalo)+(radio_ovalo*radio_ovalo))), y_S3+((float)Math.sqrt((radio_ovalo*radio_ovalo)+(radio_ovalo*radio_ovalo)))); //Creamos el camino del ovalo superior final RectF ovalo_superior = new RectF(); ovalo_superior.set(x_S0-((float) Math.sqrt((radio_ovalo*radio_ovalo)+(radio_ovalo*radio_ovalo))), y_S0-((float)Math.sqrt((radio_ovalo*radio_ovalo)+(radio_ovalo*radio_ovalo))), x_S0+((float)Math.sqrt((radio_ovalo*radio_ovalo)+(radio_ovalo*radio_ovalo))), y_S0+((float)Math.sqrt((radio_ovalo*radio_ovalo)+(radio_ovalo*radio_ovalo)))); //Dibujamos círculos y letras canvas.drawCircle(x_S0, y_S0, radio, pincel); canvas.drawText("S0",x_S0-5,y_S0+5, pincel); canvas.drawCircle(x_S1, y_S1, radio, pincel); canvas.drawText("S1",x_S1-5,y_S1+5, pincel); canvas.drawCircle(x_S2, y_S2, radio, pincel); canvas.drawText("S2",x_S2-5,y_S2+5, pincel); canvas.drawCircle(x_S3, y_S3, radio, pincel); canvas.drawText("S3",x_S3-5,y_S3+5, pincel); canvas.drawCircle(x_S4, y_S4, radio, pincel); canvas.drawText("S4",x_S4-5,y_S4+5, pincel); //Si se pulsa un círculo, lo pintamos de rojo como si estuviera seleccionado if (accion=="S0"){ pincel.setColor(Color.RED); canvas.drawText("S0",x_S0-5,y_S0+5, pincel); pincel.setColor(Color.BLACK); } if (accion=="S1"){ pincel.setColor(Color.RED); canvas.drawText("S1",x_S1-5,y_S1+5, pincel); pincel.setColor(Color.BLACK); } if (accion=="S2"){ pincel.setColor(Color.RED); canvas.drawText("S2",x_S2-5,y_S2+5, pincel); pincel.setColor(Color.BLACK); } if (accion=="S3"){ pincel.setColor(Color.RED); canvas.drawText("S3",x_S3-5,y_S3+5, pincel); pincel.setColor(Color.BLACK); } if (accion=="S4"){ pincel.setColor(Color.RED); canvas.drawText("S4",x_S4-5,y_S4+5, pincel); pincel.setColor(Color.BLACK); } //Para el segundo círculo pulsado if (contador==2){ // //Mostramos el diálogo de alerta // final CharSequence[] items = {"0 / 0", "0 / 1", "1 / 0", "1 / 1"}; // AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); // builder.setTitle("Indica combinación de entrada/salida"); // // builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() { // public void onClick(DialogInterface dialog, int item) { // // if (item==1){ // text="0 / 0"; // dialog.cancel(); // } // // if (item==2){ // text="0 / 1"; // dialog.cancel(); // } // // if (item==3){ // text="1 / 0"; // dialog.cancel(); // } // // if (item==4){ // text="1 / 1"; // dialog.cancel(); // } // } // // }); // // AlertDialog alert = builder.create(); // alert.show(); //Vemos cuál es el segundo círculo pulsado if ((x&gt;=x_S0-radio &amp;&amp; x&lt;=x_S0+radio) &amp;&amp; (y&gt;=y_S0-radio &amp;&amp; y&lt;=y_S0+radio)){ //S0 x_destino=x_S0; //guardamos las coordenadas del segundo círculo pulsado como destino y_destino=y_S0; if (x_origen==260 &amp;&amp; y_origen==200){ //S1 path.arcTo(ovalo_principal,-12,-66 ,true); canvas.drawPath(path, pincel); // canvas.drawTextOnPath(text, path, 50, 20, pincel); } if (x_origen==60 &amp;&amp; y_origen==200){ //S4 path.arcTo(ovalo_principal,192,66 ,true); canvas.drawPath(path, pincel); // canvas.drawTextOnPath(text, path, 50, 20, pincel); } if (x_origen==160 &amp;&amp; y_origen==200){//S2 path.arcTo(ovalo_pequeño_superior,80,-160 ,true); canvas.drawPath(path, pincel); // canvas.drawTextOnPath(text, path, 50, 20, pincel); } if (x_origen==160 &amp;&amp; y_origen==300){//S3 path.arcTo(ovalo_izquierda,38,-76 ,true); canvas.drawPath(path, pincel); // canvas.drawTextOnPath(text, path, 50, 20, pincel); } // } contador=0; } if ((x&gt;=x_S1-radio &amp;&amp; x&lt;=x_S1+radio) &amp;&amp; (y&gt;=y_S1-radio &amp;&amp; y&lt;=y_S1+radio)){//S1 x_destino=x_S1; y_destino=y_S1; if (x_origen==160 &amp;&amp; y_origen==100){ //S0 path.arcTo(ovalo_superior_derecha,102,66,true); canvas.drawPath(path, pincel); // canvas.drawTextOnPath(text, path, 50, 20, pincel); } if (x_origen==60 &amp;&amp; y_origen==200){ //S4 path.arcTo(ovalo_superior,127,-74,true); canvas.drawPath(path, pincel); // canvas.drawTextOnPath(text, path, 50, 20, pincel); } if (x_origen==160 &amp;&amp; y_origen==200){//S2 path.arcTo(ovalo_pequeño_derecha,12,166 ,true); canvas.drawPath(path, pincel); // canvas.drawTextOnPath(text, path, 50, 20, pincel); } if (x_origen==160 &amp;&amp; y_origen==300){//S3 path.arcTo(ovalo_principal,12,66 ,true); canvas.drawPath(path, pincel); // canvas.drawTextOnPath(text, path, 50, 20, pincel); } // } contador=0; } if ((x&gt;=x_S2-radio &amp;&amp; x&lt;=x_S2+radio) &amp;&amp; (y&gt;=y_S2-radio &amp;&amp; y&lt;=y_S2+radio)){//S2 x_destino=x_S2; y_destino=y_S2; if (x_origen==160 &amp;&amp; y_origen==100){ //S0 path.arcTo(ovalo_pequeño_superior,102,156,true); canvas.drawPath(path, pincel); // canvas.drawTextOnPath(text, path, 50, 20, pincel); } if (x_origen==60 &amp;&amp; y_origen==200){ //S4 path.arcTo(ovalo_pequeño_izquierda,12,166,true); canvas.drawPath(path, pincel); // canvas.drawTextOnPath(text, path, 50, 20, pincel); } if (x_origen==260 &amp;&amp; y_origen==200){//S1 path.arcTo(ovalo_pequeño_derecha,-12,-166,true); canvas.drawPath(path, pincel); // canvas.drawTextOnPath(text, path, 50, 20, pincel); } if (x_origen==160 &amp;&amp; y_origen==300){//S3 path.arcTo(ovalo_pequeño_inferior,102,156,true); canvas.drawPath(path, pincel); // canvas.drawTextOnPath(text, path, 50, 20, pincel); } // } contador=0; } if ((x&gt;=x_S3-radio &amp;&amp; x&lt;=x_S3+radio) &amp;&amp; (y&gt;=y_S3-radio &amp;&amp; y&lt;=y_S3+radio)){//S3 x_destino=x_S3; y_destino=y_S3; if (x_origen==160 &amp;&amp; y_origen==100){ //S0 path.arcTo(ovalo_derecha,142,76,true); canvas.drawPath(path, pincel); // canvas.drawTextOnPath(text, path, 50, 20, pincel); } if (x_origen==60 &amp;&amp; y_origen==200){ //S4 path.arcTo(ovalo_principal,102,76,true); canvas.drawPath(path, pincel); // canvas.drawTextOnPath(text, path, 50, 20, pincel); } if (x_origen==260 &amp;&amp; y_origen==200){//S1 path.arcTo(ovalo_inferior_derecha,192,66,true); canvas.drawPath(path, pincel); // canvas.drawTextOnPath(text, path, 50, 20, pincel); } if (x_origen==160 &amp;&amp; y_origen==200){//S2 path.arcTo(ovalo_pequeño_inferior,78,-156,true); canvas.drawPath(path, pincel); // canvas.drawTextOnPath(text, path, 50, 20, pincel); } // } contador=0; } if ((x&gt;=x_S4-radio &amp;&amp; x&lt;=x_S4+radio) &amp;&amp; (y&gt;=y_S4-radio &amp;&amp; y&lt;=y_S4+radio)){//S4 x_destino=x_S4; y_destino=y_S4; if (x_origen==160 &amp;&amp; y_origen==100){ //S0 path.arcTo(ovalo_superior_izquierda,12,66,true); canvas.drawPath(path, pincel); // canvas.drawTextOnPath(text, path, 50, 20, pincel); } if (x_origen==160 &amp;&amp; y_origen==300){ //S3 path.arcTo(ovalo_inferior_izquierda,-12,-66,true); canvas.drawPath(path, pincel); // canvas.drawTextOnPath(text, path, 50, 20, pincel); } if (x_origen==260 &amp;&amp; y_origen==200){//S1 path.arcTo(ovalo_inferior,233,74,true); canvas.drawPath(path, pincel); // canvas.drawTextOnPath(text, path, 50, 20, pincel); } if (x_origen==160 &amp;&amp; y_origen==200){//S2 path.arcTo(ovalo_pequeño_izquierda,192,156,true); canvas.drawPath(path, pincel); // canvas.drawTextOnPath(text, path, 50, 20, pincel); } // } contador=0; } } } //Método que escucha si pulsamos la pantalla public boolean onTouchEvent(MotionEvent e){ //Obtenemos coordenadas de donde pulsamos x=e.getX(); y=e.getY(); //Si pulsamos cualquiera de los círculos if ((x&gt;=x_S0-radio &amp;&amp; x&lt;=x_S0+radio) &amp;&amp; (y&gt;=y_S0-radio &amp;&amp; y&lt;=y_S0+radio)){ //S0 if (e.getAction()==MotionEvent.ACTION_DOWN){ accion="S0"; //señal para colorear de rojo el circulo } if (e.getAction()==MotionEvent.ACTION_UP){ contador=contador+1; //contador de que hemos pulsado el primer círculo if (contador==1){ //si pulsamos el primer círculo, guardamos las coordenadas de ese círculo como origen x_origen=x_S0; y_origen=y_S0; } } } if ((x&gt;=x_S1-radio &amp;&amp; x&lt;=x_S1+radio) &amp;&amp; (y&gt;=y_S1-radio &amp;&amp; y&lt;=y_S1+radio)){//S1 if (e.getAction()==MotionEvent.ACTION_DOWN){ accion="S1"; } if (e.getAction()==MotionEvent.ACTION_UP){ contador=contador+1; if (contador==1){ x_origen=x_S1; y_origen=y_S1; } } } if ((x&gt;=x_S2-radio &amp;&amp; x&lt;=x_S2+radio) &amp;&amp; (y&gt;=y_S2-radio &amp;&amp; y&lt;=y_S2+radio)){//S2 if (e.getAction()==MotionEvent.ACTION_DOWN){ accion="S2"; } if (e.getAction()==MotionEvent.ACTION_UP){ contador=contador+1; if (contador==1){ x_origen=x_S2; y_origen=y_S2; } } } if ((x&gt;=x_S3-radio &amp;&amp; x&lt;=x_S3+radio) &amp;&amp; (y&gt;=y_S3-radio &amp;&amp; y&lt;=y_S3+radio)){//S3 if (e.getAction()==MotionEvent.ACTION_DOWN){ accion="S3"; } if (e.getAction()==MotionEvent.ACTION_UP){ contador=contador+1; if (contador==1){ x_origen=x_S3; y_origen=y_S3; } } } if ((x&gt;=x_S4-radio &amp;&amp; x&lt;=x_S4+radio) &amp;&amp; (y&gt;=y_S4-radio &amp;&amp; y&lt;=y_S4+radio)){//S4 if (e.getAction()==MotionEvent.ACTION_DOWN){ accion="S4"; } if (e.getAction()==MotionEvent.ACTION_UP){ contador=contador+1; if (contador==1){ x_origen=x_S4; y_origen=y_S4; } } } invalidate(); return true; } } } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload