java - state machine in android -
i have code excercise.
i want press 2 circles (states), , link them line. when both pressed, appears alert allows choose input , output.
i want input , output written on path, (in case canvas.drawtextonpath).
i have problems with:
the alert not returns "text" well
the text on path appears without line!
if can helps me excercise (chat, mail...), because i'm blocked this. appreciate lot.
thank you
this 1 of errors,the text written line not.
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 menu; adds items action bar if 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 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>=x_s0-radio && x<=x_s0+radio) && (y>=y_s0-radio && y<=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 && 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 && 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 && 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 && 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>=x_s1-radio && x<=x_s1+radio) && (y>=y_s1-radio && y<=y_s1+radio)){//s1 x_destino=x_s1; y_destino=y_s1; if (x_origen==160 && 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 && 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 && 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 && 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>=x_s2-radio && x<=x_s2+radio) && (y>=y_s2-radio && y<=y_s2+radio)){//s2 x_destino=x_s2; y_destino=y_s2; if (x_origen==160 && 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 && 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 && 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 && 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>=x_s3-radio && x<=x_s3+radio) && (y>=y_s3-radio && y<=y_s3+radio)){//s3 x_destino=x_s3; y_destino=y_s3; if (x_origen==160 && 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 && 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 && 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 && 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>=x_s4-radio && x<=x_s4+radio) && (y>=y_s4-radio && y<=y_s4+radio)){//s4 x_destino=x_s4; y_destino=y_s4; if (x_origen==160 && 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 && 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 && 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 && 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>=x_s0-radio && x<=x_s0+radio) && (y>=y_s0-radio && y<=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>=x_s1-radio && x<=x_s1+radio) && (y>=y_s1-radio && y<=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>=x_s2-radio && x<=x_s2+radio) && (y>=y_s2-radio && y<=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>=x_s3-radio && x<=x_s3+radio) && (y>=y_s3-radio && y<=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>=x_s4-radio && x<=x_s4+radio) && (y>=y_s4-radio && y<=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; } } }
Comments
Post a Comment