2016-07-13 8 views
2

mPaint.setShadowLayer()가 mPaint.EmbossMaskFilter() 지시문을 방해합니다. 그렇지 않으면 아무것도 캔버스에 그려지지 않습니다.안드로이드 페인트 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)); 

예상되는 동작, 버그 또는 무엇입니까? 나는 minSDK 11에서 appcompat 7.23.14를 사용하여 건물을 짓고 있습니다.

답변

0

해결 방법은 쉐도우 레이어가 있지만 엠 보스가없는 페인트와 동일한 외곽선 모양 및 위치를 가진 다른 드로어 블을 사용하고 이전에 그립니다 엠보싱 된 그림 그리기. 가능한 페인트가 투명한 색상 속성을 가져야하는 앤티 앨리어싱 결과물을 피하려면

0

EmbossMaskFiltersetShadowLayer 속성을 모두 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