이 코드가 있습니다. 나는 새로운 클래스 "diagrama"를 정의한다. 나는 View를 확장한다.이 코드에 단추 (회 전자) 추가
화면 하단에 버튼 (특히 회 전자 버튼)을 추가하고 싶지만 어떻게해야할지 모르겠다.
저는 상태 머신을 만들기 위해 두 개의 "상태"를 누른 다음 라인을 연결하려고합니다. 각 줄에 텍스트가있는 입력 및 출력을 표시하려고합니다.
입력 및 출력을 선택하기 위해 AlertBuild를 만들려고했지만 주석을 달았습니다. 입력과 출력을 선택하기위한 두 개의 스피너 버튼을 만들고 싶습니다.
저는이 앱을 시작하지 않았지만이 앱에 문제가 없지만 계속 진행할 수 없습니다.
누군가 나를 도울 수 있으면 감사하겠습니다.
감사합니다.
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>=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 ,true);
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 ,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_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;
}
}
}
은 어디에서이 코드를 얻었 는가하면 회로 굉장한 감사? –
먼저보기에 다른 그룹을 포함 시키려면 View를 확장하고 ViewGroup을 확장하지 마십시오. –
아니면 레이아웃 파일을 사용하고 다이어그램을 레이아웃의 한 요소로 사용하십시오. (아마 더 나은 접근법) –