2016-04-14 23 views
1

Özel bir View için bir dikey LinearGradient uyguladı. Cihazların çoğunda iyi çalışıyor, ancak Android 4.1.2'yi çalıştıran bir Galaxy Note 2'de degradenin renkleri (renk enterpolasyonu) arasında sorunsuz geçişi olmadığını, ancak her bir rengin bir noktada başladığını fark ettik.Android LinearGradient renk enterpolator çalışmıyor Android 4.1.2

Birisinin yöne işaret edebilir bu

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); 

gibi gradyan inşa ediyorum?

Teşekkürler!

+0

"mColors" ve "yüzdeler" nedir? Log.d onları denedin mi? – pskink

+0

'mColors', degrade adımları için renk kodlarını içeren bir int [[] dizisidir. Gerçek renk değişimi adımları için [0..1] 'deki yüzdeler ve yüzdeler. Ve evet, ben onları dışarı kaydettim ve sadece – Arkde

+0

da "height'! = 0?" Gibi görünüyorlar, sadece yeni LinearGradient (0, 0, 100, 100, Color.GREEN, Color.RED, Shader) test etmek için deneyin .TileMode.CLAMP); 'paint.setShader' ve' canvas.drawPaint' – pskink

cevap

1

Sonunda bir çözüme vardım. Görünüşe göre Android 4.1.2'deki LinearGradient sınıfının tuhaf bir yol yüzdesi var. Yüzde en az bir değerin 1f'a eşit olması durumunda, renk enterpolasyonlarının çalışmadığı görülüyor.

Yani bu düzeltmek için, ben percentages[] son değer 1f ayarlı ve hem mColors[] ve percentages[] bu düzgün çalışması için sırayla aynı uzunlukta olduğundan emin yaptı.