Android Grafikklasse

SockenSepp123

Aktives Mitglied
Guten Tag,

ich möchte eine Grafikausgabe in Android erstellen. Im Internet habe ich nur bruchstücke einer Grafikklasse gefunden und mir folgendes gebastelt:

Java:
public class Grafik extends View {
    Paint paint;
  

    public Grafik(Context context) {
        super(context);
        paint = new Paint();
        paint.setColor(Color.BLACK);
        paint.setStyle(Paint.Style.STROKE);
    }

    @Override
    public void onDraw(Canvas canvas) {
        canvas.drawLine(20.0f, 50.0f, 50.0f, 200.0f, paint);
        canvas.drawRect(100.0f, 50.0f, 60.0f, 80.0f, paint);
        canvas.drawCircle(200.0f, 100.0f, 80.0f, paint);
    }

    public void Kreis() {

    }
}

Was muss ich in die Methode Kreis schreiben, dass ein Kreis gezeichnet wird?

Danke!
 

Robat

Top Contributor
Möchtest du nur ein mal einen Kreis zeichnen oder soll beliebig aus anderen Klassen verschiedene Kreise gezeichnet werden können? (mit versch. Größen, Positionen, etc)
 

Robat

Top Contributor
Nun ja eine Möglichkeit wäre folgendes:
  1. Leg dir global eine Liste an in denen du alle notwendigen Daten deiner Kreises speicherst. (bin mir gerade nicht sicher ob Android bereits eine Circle Klasse bereit stellt, wenn nicht musst du dir selber fix eine basteln welche die x, y Koordinate, als auch den Radius und das Paint-Objekt speichert)
  2. Wenn du einen neuen Kreis zeichnen lassen willst rufst du die Kreis(...) Methode mit den o.g. Parametern auf und fügst deiner o.g. Liste einen neuen Eintrag hinzu.
  3. In deiner onDraw(Canvas c) Methode iterierst du über die o.g. Liste und lässt alle dort enthaltenen Elemente zeichnen.
 

Robat

Top Contributor
Woran scheitert es denn? Was genau ging denn nicht?
Wenn ich dir hier jetzt den fertigen Code hinschmiere hast du einen Lerneffekt der gegen 0 geht.
 

Robat

Top Contributor
Naja gut, weil ich heute einen guten Tag habe (SCNR) :p

Java:
public class CircleDrawer extends View
{
    private final int DIAMETER = 5;

    private final Paint paint;
    private final List<Circle> list;

    public CircleDrawer(Context context) {
        super(context);

        paint = new Paint();
        paint.setColor(Color.RED);

        list = new ArrayList<>();
    }

    @Override
    public void onDraw(Canvas c)
    {
        for(Circle circle : list)
            c.drawCircle(circle.x, circle.y, DIAMETER, paint);
    }

    
    public void drawCircle(float x, float y)
    {
        list.add(new Circle(x, y));
        invalidate();
    }
}

mit der entsprechenden Circle Klasse

Java:
public  class Circle
{
    private float x, y;

    public Circle(float x, float y)
    {
        this.x = x;
        this.y = y;
    }

    public float getX() {
        return x;
    }

    public float getY() {
        return y;
    }
}
 

SockenSepp123

Aktives Mitglied
Danke für diese Variante!

In “normalem“ Java, also für den PC, hat meine GrafikKlasse viel weniger Code. Gibt es keine Möglichkeit, unter Android in Klasse Grafik eine Methode Kreis, eine Methode Dreieck etc zu schreiben und dann einfach das so zu zeichnen?

Wenn ich meinen PC wieder an habe, kann ich ein Beispiel senden, wie ich es meine.

Danke!
 

SockenSepp123

Aktives Mitglied
Wenn ihc dann einen Kreis zeichnen will, muss ich das schreiben?

Java:
public class MainActivity extends AppCompatActivity {
    MeineGrafik g;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

        g.drawCircle(20,20);
    }
}

Wenn ich es wie oben beschrieben mache, stopt das "Spiel"
 

Neue Themen


Oben