Note that there are some explanatory texts on larger screens.

plurals
  1. POstate machine in android
    primarykey
    data
    text
    <p>I have this code for an excercise. </p> <p>I want to press 2 circles (states), and link them with a line. When both are pressed, appears an alert that allows you to choose the input and output.</p> <p>I want that the input and output were written on the path, (in this case with canvas.drawTextOnPath).</p> <p>I have problems with:</p> <ul> <li><p>The alert not returns "text" well</p></li> <li><p>The text on path appears without the line!</p></li> </ul> <p>If someone can helps me with this excercise (chat, mail...), because I'm blocked with this. I would appreciate a lot.</p> <p>Thank you</p> <p>This is one of the errors,the text is written but the line not. <img src="https://i.stack.imgur.com/SwtMs.jpg" alt="enter image description here"></p> <pre><code>import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.RectF; import android.os.Bundle; import android.view.Menu; import android.view.MotionEvent; import android.view.View; public class MainActivity extends Activity{ //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; int num; Path path= new Path(); //path para crear flechas @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{ 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.setStyle(Paint.Style.STROKE); pincel.setStrokeWidth(2); pincel.setColor(Color.BLACK); // 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){ 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 ,false); // 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 ,false); // 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>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

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