2016-04-14 5 views
1

Я внедрил вертикальный LinearGradient для пользовательского View. Он работает хорошо на большинстве устройств, но мы заметили, что в Galaxy Note 2, работающем под управлением Android 4.1.2, градиент не плавно переходит между цветами (цветовая интерполяция), но каждый цвет начинается только в какой-то момент.Android LinearGradient цветной интерполятор не работает на Android 4.1.2

Я построения градиента, как этот

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

Может кто-нибудь мне точку в направлении?

Спасибо!

+0

Что такое 'mColors' &' percentages'? вы пытались «Log.d» их выпустить? – pskink

+0

'mColors' - это массив int [[], содержащий цветовые коды для шагов градиента. Значения «проценты» и «плавающие» значения в [0..1] для реальных шагов изменения цвета. И да, я выписал их, и они выглядят просто отлично – Arkde

+0

также является 'height'! = 0 ?, попробуйте просто для тестирования' new LinearGradient (0, 0, 100, 100, Color.GREEN, Color.RED, Shader .TileMode.CLAMP); 'затем следуют' paint.setShader' и 'canvas.drawPaint' – pskink

ответ

1

Я, наконец, пришел к решению. Кажется, класс LinearGradient на Android 4.1.2 имеет странный способ обработки процентов. Кажется, что интерполяции цветов не работают, если проценты не имеют хотя бы одного значения, равного 1f.

Так, чтобы исправить это, я уверен, что percentages[] имеют последнее значение, установленное в 1f и оба mColors[] и percentages[] имеют одинаковую длину для того, чтобы это работать должным образом.