Canvas in Canvas Darstellen

  • Antworten:2
  • Bentwortet
Robbiani Renato
  • Forum-Beiträge: 615

04.03.2021, 11:04:00 via Website

Hallo zusammen

Ich möchte eine Zeichnung auf einer Zeichnung machen. Was muss ich machen, dass die zweite Zeichnung ebenfalls dargestellt wird?

package ch.robbisoft.kompass;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.TypedValue;
import android.view.View;

public class KompassnadelView extends View {

private float winkel=0;
private float werty=0;
private float wertz=0;
private Paint zeichenfarbe = new Paint();
private Paint textPaint;
private Paint kreisPaint;

public float getWerty() {
    return werty;
}

public void setWerty(float werty) {
    this.werty = werty;
}

public float getWertz() {
    return wertz;
}

public void setWertz(float wertz) {
    this.wertz = wertz;
}

public float getWinkel() {
    return winkel;
}

public void setWinkel(float winkel) {
    this.winkel = winkel;
    invalidate();
}

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

    zeichenfarbe.setAntiAlias(true);
    zeichenfarbe.setColor(Color.WHITE);
    zeichenfarbe.setStyle(Paint.Style.FILL);

    //Schreibfarbe
    textPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG);
    textPaint.setColor(Color.MAGENTA);
    textPaint.setTextSize((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 20, getResources().getDisplayMetrics()));
    textPaint.setTextAlign(Paint.Align.LEFT);
}

@Override
protected void onDraw(Canvas canvas) {

    canvas.drawColor(Color.BLACK);
    Canvas pfeil = new Canvas();
    pfeil.drawColor(Color.BLUE);

    int breite = canvas.getWidth();
    int hoehe = canvas.getHeight();

// Den kleineren der beiden Werte
int laenge = Math.min(breite, hoehe);
int kurz = laenge - 20;

    Path pfad = new Path();
    pfad.moveTo(0, -kurz/2);
    pfad.lineTo(kurz/20, kurz/2);
    pfad.lineTo(-kurz/20, kurz/2);
    pfad.close();

    canvas.translate(breite / 2, hoehe / 2);

// canvas.rotate(winkel);
// canvas.drawPath(pfad, zeichenfarbe);
pfeil.drawPath(pfad, zeichenfarbe);

    //Kreis Zeichnen
    kreisPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG);
    kreisPaint.setColor(Color.YELLOW);
    kreisPaint.setStyle(Paint.Style.STROKE);
    canvas.drawCircle(0, 0, (laenge / 2), kreisPaint);

    //Text ausgeben
    Paint.FontMetrics metric = textPaint.getFontMetrics();
    int textHeight = (int) Math.ceil(metric.descent - metric.ascent);
    int y = (int)(textHeight - metric.descent);
    canvas.drawText(String.format("%.2f°",winkel), -50, -1 * ((laenge / 2) + y), textPaint);

// canvas.drawText(Float.toString(werty), 0, y+100, textPaint);
// canvas.drawText(Float.toString(wertz), 0, y+200, textPaint);

    //Kreiseinteilung
    kreisPaint.setTextSize((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 10, getResources().getDisplayMetrics()));
    canvas.drawText("±0°", 0, -1 * (laenge / 2), kreisPaint);
    canvas.drawText("-90°", -1* (laenge / 2), 0, kreisPaint);
    canvas.drawText("±180°", 0, (laenge / 2), kreisPaint);
    canvas.drawText("90°", (laenge / 2), 0, kreisPaint);
}

}

Was muss ich machen, dass der Canvas "pfeil" ebenfalls dargestellt wird.

Gruss Renato

Kommentieren
Beste Antwort
swa00
  • Forum-Beiträge: 3.704

04.03.2021, 12:09:43 via Website

Hallo Renato,

ich persönlich erstelle mir mehrere Sub-Alpha - Bitmaps (ARG_8888), ein Destination Bitmap,
bilde von jedem ein Canvas und benutze dann PorterDuff.

https://developer.android.com/reference/android/graphics/PorterDuff.Mode

Sinnbildlich : Erstelle dir transparente Folien in Form von Bitmaps, lege sie mit PorterDuff
in der finalen Folie übereinander.

Achte darauf , dass zum Schluss alle Helfer-Bitmaps wieder freigegeben sind.

— geändert am 04.03.2021, 13:46:29

Liebe Grüße - Stefan
[ App - Entwicklung ]

Hilfreich?
Robbiani RenatoPascal P.
Kommentieren
Jokel
  • Forum-Beiträge: 1.537

04.03.2021, 11:52:53 via Website

Hallo du erstellst in der onDraw ein neues Canvas Pfeil mit New. Neues Objekt was nicht mit dem übergebenen Canvas zu tun hat.

Der onDraw wird ein canvas übergeben und nur das was auf diesen Canvas gezeichnet wird, wird auch angezeigt.

Ich sehe keine Verknüpfung mit dem Pfeil Canvas mit dem in der onDraw Methode.

— geändert am 04.03.2021, 12:05:53

Hilfreich?
Kommentieren
Beste Antwort
swa00
  • Forum-Beiträge: 3.704

04.03.2021, 12:09:43 via Website

Hallo Renato,

ich persönlich erstelle mir mehrere Sub-Alpha - Bitmaps (ARG_8888), ein Destination Bitmap,
bilde von jedem ein Canvas und benutze dann PorterDuff.

https://developer.android.com/reference/android/graphics/PorterDuff.Mode

Sinnbildlich : Erstelle dir transparente Folien in Form von Bitmaps, lege sie mit PorterDuff
in der finalen Folie übereinander.

Achte darauf , dass zum Schluss alle Helfer-Bitmaps wieder freigegeben sind.

— geändert am 04.03.2021, 13:46:29

Liebe Grüße - Stefan
[ App - Entwicklung ]

Hilfreich?
Robbiani RenatoPascal P.
Kommentieren