ImageView auf Android 4.4.4 verwaschen

  • Antworten:6
  • Bentwortet
Alex F.
  • Forum-Beiträge: 6

15.08.2017, 12:07:12 via Website

Ich stelle in meinem Layout Linien durch ImageViews dar, die einfach eine Background-Farbe haben anstelle eines Bildes:

<ImageView
android:layout_width="100dp"
android:layout_height="5dp"
android:id="@+id/element"
android:background="#1d6193"
android:rotation="50"
android:alpha="1.0" />

Die Linien sind auf einem Sony Xperia Z2 mit Android 4.4.4 "verwaschen". Das sieht dann so aus als ob man die Linien mit einer Spraydose gezeichnet hätte. Man sieht also teils die Background-Farbe und teils die Farbe hinter der ImageView.
Ich kann hier keine Bilder davon hochladen, weil es über die "Bild einfügen" Funktion irgendwie nicht funktioniert, auch nicht per Drag and Drop (Bild hat das richtige Format und ist auch nicht zu groß).

Die Linien werden auf Android 5 und höher korrekt angezeigt. Sie sind auch nur "verwaschen", wenn ich eine Rotation bei der ImageView angebe.
Es scheint ein Fehler bei Android 4 zu sein, wenn man eine ImageView rotiert.

Weiß vielleicht jemand wie man das Problem beheben kann?

Antworten
swa00
  • Forum-Beiträge: 3.704

15.08.2017, 12:17:27 via Website

Hallo Alex,

gib bei deiner Farbgebung mal den Alpha -Kanal an AA RR GG BB und setze den auf FF

android:background="#FF1d6193"

Anmerkung : 50 Grad Rotation bei einem Display mit geringer DPI verursacht natürlich einen sichtbaren
Antialising effekt - Das ist völlig normal

P.S Man dreht auch das Image zuvor und nicht den Holder oder macht es gleich mit Canvas
https://developer.android.com/reference/android/graphics/Canvas.html

— geändert am 15.08.2017, 12:30:21

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

Antworten
Alex F.
  • Forum-Beiträge: 6

15.08.2017, 12:35:58 via Website

Der Hinweis mit dem Alpha-Kanal hat leider nicht geholfen. Das Problem ist kein Antialising.
Wie gesagt die Linie ist nicht durchgehend einfarbig, sondern hat transparente Stellen. Jetzt konnte ich ein Bild hochladen:

image

— geändert am 15.08.2017, 12:36:34

Antworten
swa00
  • Forum-Beiträge: 3.704

15.08.2017, 12:48:17 via Website

Hallo Alex ,

dein "Verwaschen" hat mich natürlich auf Antialising gebracht :-)
Das da ist eher unterbrochen oder Sprühdose

Ganz klar : Das führe ich auf die API /Kernel resp GrafikChip / Display zurück - ich habe sowas noch nie gesehen.

Dann solltest du deine Linien direkt mit Canvas rendern , denn deine Vorgehensweise ist eigentlich
nicht für so etwas gedacht und eher ungewöhnlich.

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

Antworten
Alex F.
  • Forum-Beiträge: 6

15.08.2017, 23:30:02 via Website

Eigentlich wollte ich das Rendern der Linien über Canvas vermeiden.
Ich bin da jetzt kein Experte und habe es auch noch nie gemacht, aber soviel ich gelesen haben, funktioniert das Zeichnen von Linien dann so, dass man die Pixel in eine Bitmap zeichnet?
Ich brauche aber auch die Option die Linien wieder zu löschen und neu zu setzen und wollte eigentlich dann nicht immer die zwischengespeicherte Bitmap neu rendern müssen.

Wenn sich der Grafikfehler nicht beheben lässt, werde ich wohl die Canvas Variante umsetzen müssen.
Ansonsten würde ich mich freuen, wenn jemand eine performante Lösung zum Zeichnen von Linien kennt. Die Variante mit den ImageViews fand ich eigentlich ziemlich einfach und man musste nur eine Rotation setzen.

Antworten
Alex F.
  • Forum-Beiträge: 6

16.08.2017, 13:21:06 via Website

Ich habe eine Lösung für das Grafikproblem gefunden. Man kann den LayerType anpassen:

if(Build.VERSION.SDK_INT < 21) {  // Nur Geräte mit Android Version kleiner 5
   view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
   // oder
   // view.setLayerType(View.LAYER_TYPE_HARDWARE, null);
}

Ich weiß nicht, ob es dadurch auf jedem Gerät mit Android-Version kleiner 5 funktioniert, aber auf meinem Sony Xperia Z2 mit Android 4.4.4 werden die Linien dadurch ohne Probleme gerendert.

swa00

Antworten
swa00
  • Forum-Beiträge: 3.704

16.08.2017, 13:23:34 via Website

Wie vermutet - GrafikChip.

Das ist ein schönes Workaround, ich würde mir aber nicht sicher sein , dass es verbreitet läuft.

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

Antworten