2016-04-14 8 views
1

Ich habe eine vertikale LinearGradient für eine benutzerdefinierte View implementiert. Es funktioniert gut auf den meisten Geräten, aber wir haben festgestellt, dass bei einem Galaxy Note 2 mit Android 4.1.2 der Farbverlauf nicht gleichmäßig zwischen Farben wechselt (Farbinterpolation), sondern jede Farbe an einem bestimmten Punkt beginnt.Android LinearGradient Farbinterpolator funktioniert nicht auf Android 4.1.2

Ich Aufbau des Gradienten wie dieses

ViewCompat.setLayerPaint(myView, null); 
    Paint paint = myView.getPaintRender(); 
    paint.setDither(true); 

    int height = myView.getHeight(); 

    // create a gradient background paint which will be later on clipped 
    mColors = generateColorsRage(myDTOProvidingData); 
    float[] percentages = generateColorPercentages(); 

    LinearGradient linearGradient = new LinearGradient(0, 0, 0, height, mColors, percentages, Shader.TileMode.CLAMP); 

    paint.setShader(linearGradient); 

auf eine Richtung Kann jemand mir zeigen?

Danke!

+0

Was sind 'mColors' &' Prozentsätze'? hast du versucht, sie zu "log.d" auszumachen? – pskink

+0

'mColors' ist ein Array von int [[], das die Farbcodes für Gradientenschritte enthält. Die Prozentwerte und Gleitkommawerte in [0..1] für die tatsächlichen Farbwechselschritte. Und ja, ich habe sie ausgeloggt und sie sehen gut aus – Arkde

+0

ist auch 'height'! = 0 ?, versuche nur' new LinearGradient (0, 0, 100, 100, Color.GREEN, Color.RED, Shader .TileMode.CLAMP); 'gefolgt von' paint.setShader' und 'canvas.drawPaint' – pskink

Antwort

1

Ich bin endlich zu einer Lösung gekommen. Es scheint, dass die LinearGradient Klasse auf dem Android 4.1.2 eine seltsame Art der Handhabung von Prozentsätzen hat. Es scheint, dass die Farbinterpolationen nicht funktionieren, wenn die Prozentwerte nicht mindestens einen Wert haben, der gleich 1f ist.

Also dieses Problem zu beheben, stellte ich sicher, dass die percentages[] der letzte Wert auf 1f gesetzt und beide mColors[] und percentages[] die gleiche Länge haben, damit diese ordnungsgemäß funktioniert.

Verwandte Themen