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.

  • Warum können keine Dateinamen im Zeichnungsordner Sonderzeichen enthalten oder mit einem Großbuchstaben beginnen?
  • Skalierungsverhältnis in Android-Bildern?
  • Wie man Spalten im Tabellenlayout gleichmäßig verteilt macht, macht den maximalen Platzbedarf
  • Android: Wie kann ich die Farbe des Datumselektors im Datepicker-Widget ändern?
  • Unbenutzte Importe in Android Studio entfernen
  • Wie platziere ich eine ActionBar auf einem SlidingMenu (wie in der Evernote App)?
  • 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); } } 

  • Um auf SharedPreference von Service in Android zuzugreifen
  • GLSurfaceView wird trotz wechselndem Render-Modus kontinuierlich rendert
  • Konstante String-Parameter und der Delphi XE5-Compiler für Android
  • Ist Firebase Cloud Messaging kostenlos?
  • Warum sind EM Schriftgrößen super winzig auf Android Handy?
  • Unity Google Play Services Plugin API ist nicht synchron mit Show Leaderboard UI-Funktion?
  • 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.