Android 6.0 behandelt die drawCircle-Methode falsch

In meiner App muss ich Kreise mit Bitmap und die drawCircle () Methode zeichnen.

Alles funktionierte gut und genau so wie es bis zu Android 6.0.

Es zieht immer noch Kreise auf alle früheren Versionen, zieht aber Rechtecke, wenn ich die App auf 6.0 verwende. Aber wenn ich es ändere, um es zu füllen, zieht es einen Kreis sowohl in api 22 und api 23. Jeder hat das gleiche Problem oder eine Idee, warum dies geschieht?

Hier ist der Quellcode und ein Screenshot (App auf API 23 auf der linken Seite und API 22 auf der rechten Seite). Gleiche app auf verschiedenen api's

public final class Circle1View extends View { private float xCenter, yCenter; private Bitmap grid = null; public Circle1View (Context context) { super(context); init(); } private void init() { setLayerType(View.LAYER_TYPE_SOFTWARE, null); } @Override protected void onDraw(Canvas canvas) { int w = getWidth(); int h = getHeight(); xCenter = w / 2; yCenter = h / 2; drawBitmaps(w, h); canvas.translate(xCenter, yCenter); canvas.scale(xCenter, yCenter); canvas.drawBitmap(grid, null, new RectF(-1, -1, 1, 1), null); } private void drawBitmaps(int w, int h) { grid = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(); canvas.translate(xCenter, yCenter); canvas.scale(xCenter, yCenter); Paint gridPaint = new Paint(); gridPaint.setStrokeWidth(0.01f); // Works with FILL // gridPaint.setStyle(Paint.Style.FILL); gridPaint.setStyle(Paint.Style.STROKE); canvas.setBitmap(grid); canvas.drawCircle(0, 0, 0.5f, gridPaint); } } 

  • Android Marshmallow Callback, wenn Benutzer die Berechtigungen von Einstellungen widerruft?
  • Android "Screen Overlay Detected" -Nachricht, wenn der Benutzer versucht, eine Berechtigung zu erteilen, wenn eine Benachrichtigung angezeigt wird
  • Android: java.land.NoSuchFieldError nach Update auf SDK 23
  • Deaktiviere keyGuard in Android 6.0
  • Meine App wird nicht auf dem Wähler-Dialog für android.intent.action.VIEW mit Mime-Typ Video / * nur auf Marshmallow angezeigt
  • Wie man Berechtigungen von einem Service in Android Marshmallow anfordert
  • Wie kann ich die "Never ask again" -Wahl im Android M-Laufzeit-Berechtigungsdialog vergessen
  • Die Statusleiste wird weiß und zeigt keinen Inhalt dahinter
  • One Solution collect form web for “Android 6.0 behandelt die drawCircle-Methode falsch”

    Ich denke, es hat etwas mit der Skalierung und Übersetzung zu tun. Stellen Sie sich vor, dass der Kreis, der gezeichnet wird, so klein ist, es dauert nur 4 Pixel. Wenn du diese wieder in die volle Größe vergrössert hast, bleibst du mit 4 geraden Linien zwischen diesen Pixeln.

    Wenn ich die Strichbreite auf 0,04f ändere, ist das Problem verschwunden. Ich würde vorschlagen, Sie vereinfachen Ihren Code, indem Sie auf die mitgelieferte Canvas direkt:

     @Override protected void onDraw(Canvas canvas) { int w = getWidth(); int h = getHeight(); xCenter = w / 2; yCenter = h / 2; Paint gridPaint = new Paint(); gridPaint.setStrokeWidth(1f); gridPaint.setStyle(Paint.Style.STROKE); canvas.drawCircle(xCenter, yCenter, w/4, gridPaint); } 

    Wie für Ihre Frage über den Unterschied zwischen API Ebenen: Marshmallow eingeführt Änderungen für drawBitmap() . Sie können sich den jeweiligen Quellcode für Lollipop und Marshmallow anschauen.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.