일단 오랜만에 접속했는데 질답게시판이 새롭게 개편했네요!
오늘 드릴 질문은 캔버스에 그림자를 넣는 법입니다.
정말 지극히 정상적인 코드임에도 안돌아가는 것 같아서 질문 남깁니다.
현재 그림자는 dispatchDraw에서 그리려고 하고 있고요.
FrameLayout을 상속받은 레이아웃입니다.
@Override
protected void dispatchDraw(Canvas canvas) {
Paint shadowPaint = new Paint();
shadowPaint.setAntiAlias(true);
shadowPaint.setColor(Color.MAGENTA);
shadowPaint.setShadowLayer(5, 5, 5, Color.BLACK);
canvas.drawRect(mLastMotionX - 50, mLastMotionY - 50, mLastMotionX + 50, mLastMotionY + 50, shadowPaint);
super.dispatchDraw(canvas);
}
그려지지 않습니다.... 마젠타색의 네모만 나올 뿐입니다...
@Override
protected void dispatchDraw(Canvas canvas) {
Paint shadowPaint = new Paint();
shadowPaint.setAntiAlias(true);
shadowPaint.setColor(Color.MAGENTA);
shadowPaint.setMaskFilter(new BlurMaskFilter(20, Blur.NORMAL));
canvas.drawRect(mLastMotionX - 50, mLastMotionY - 50, mLastMotionX + 50, mLastMotionY + 50, shadowPaint);
super.dispatchDraw(canvas);
}
블러를 이용해서 위에 덧대려고 했습니다..... 안됩니다....
혹시 super.dispatchDraw의 위치에 따라 다른가 싶어 변경도 해보았지만 전혀 먹히지 않습니다.
물론 저 코드 아래로 다른 Drawable들을 그리는 코드들이 있습니다.
상관이 있을까요? ㅠㅠㅠ
네모는 아주 잘 그려집니다만 Blur라던가 Shadow는 전혀 먹히질 않네요...ㅠ
혹시 이와 관련해서 같은 문제에 봉착해보셨다던가 해결책을 아신다면 답변 부탁드립니다. ㅠ
P.S. 혹시 canvas.save(), restore()와 연계되지 않는다던가 하는 정보가 있으시면 답변 부탁드리겠습니다 ㅠ