2016-07-13 3 views
2

Похоже, что mPaint.setShadowLayer() вмешивается в директиву mPaint.EmbossMaskFilter(). Я не могу установить оба для моей краски, так как на холсте ничего не нарисовано.Android Paint EmbossMaskFilter, конфликтующий с setShadowLayer

mPaintRing = new Paint(); 
mPaintRing.setFlags(Paint.ANTI_ALIAS_FLAG); 
mPaintRing.setColor(colorGold); 
mPaintRing.setDither(true); 
mPaintRing.setShadowLayer(3,0,15,colorBackShadow); 
mPaintRing.setStyle(Paint.Style.STROKE); 
mPaintRing.setMaskFilter(new EmbossMaskFilter(new float[]{0, 1, 1},0.7f, 6.0f, 7.5f)); 

Это ожидаемое поведение, ошибка, или я что-то упускаю? Я строю для M, используя appcompat 7.23.14 с minSDK 11.

ответ

0

Обходной путь заключается в использовании другого чертежа с той же формой и расположением внешнего контура с краской, имеющей теневой слой, но без тиснения, и нарисовать ее до для рисования рельефной. Чтобы избежать возможных артефактов сглаживания, которые должны иметь прозрачный цвет.

0

Попробуйте этот код для применения как EmbossMaskFilter, так и setShadowLayer собственности на Paint. Эта работа отлично.

mPaintRing.setShadowLayer(3,0,15,Color.Black); 
mPaintRing.setMaskFilter(null); 
canvas.drawText(mPaintRing.getText, 0, 0, mPaintRing); 

mPaintRing.clearShadowLayer(); 
mPaintRing.setMaskFilter(new EmbossMaskFilter(new float[]{0, 1, 1},0.7f, 6.0f, 7.5f)); 
canvas.drawTextOnPath(mPaintRing.getText, 0, 0, mPaintRing); 

Если все еще их проблема, спросите здесь или покажите мне весь ваш код, я буду их за помощь.

+0

Это почти то же самое, что и мой обходной путь - рисунок объекта дважды. Но в моем случае я просто определяю 2 разные краски заранее. Ваш подход может быть хорошим для статического чертежа, но изменение цвета во время onDraw для анимированного пользовательского представления может быть слишком дорогостоящим. – halxinate