저는 경로를 렌더링하여 지구본을 그립니다. 지구의 가장자리가 매우 날카 롭고 가장자리를 부드럽게 만들어 시각적으로 매력적으로 보이고 싶습니다.방사형 그래디언트 투명도로 반지 만들기
성능 향상을 위해 은선 제거를 수행하지 않습니다. 나는 Path의 각 점 (사용자가보고있는 지구의 측면)이 보이는지 여부를 계산하고 가장 가까운 모서리로 Path를 그립니다. 이를 숨기려면 전체보기 위에 비트 맵을 그리고 지구를보기 위해 구멍을 뚫습니다.
가장자리를 부드럽게하려면 방사형 그래디언트 투명도로 반지를 만들려고합니다. 이 방법은 마스크를 만듭니다
private void createMask(int width, int height, double radius) {
if(radius==0){return;}
if (mask != null) {
mask.recycle();
}
mask = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_4444);
// create a RadialGradient
RadialGradient gradient = new android.graphics.RadialGradient(
kHorizontalOffset, kVerticalOffset,
30f, 0x00FF0000, 0xFFFF0000,
android.graphics.Shader.TileMode.CLAMP);
// TODO move to init()
Paint p = new Paint();
p.setShader(gradient);
//p.setColor(0xFF000000);
p.setColor(0xFFFF0000);
p.setStrokeWidth(20f);
p.setStrokeCap(Paint.Cap.ROUND);
p.setStyle(Paint.Style.STROKE);
p.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OVER));
Canvas maskCanvas = new Canvas(mask);
maskCanvas.drawColor(Color.BLACK);
final RectF rect = new RectF();
rect.set((float)(kHorizontalOffset - radius + 50), (float)(kVerticalOffset - radius + 50),
(float)(kHorizontalOffset + radius - 50), (float)(kVerticalOffset + radius - 50));
// draw transparent circle using the maskPaint
maskCanvas.drawCircle(kHorizontalOffset, this.getHeight() - kVerticalOffset, (float) radius, maskPaint);
// draw the radial gradient ring
maskCanvas.drawArc(rect, -90, 360, false, p);
}
내 문제는 상관없이 내가 무엇을 사용 PortDuff.Mode, 난 항상 링 가장자리에서 오프셋이 예에서와 같이 고체 링 (또는 링)를 얻을 수 없다는 것입니다 그리고 내가 무슨 일이 일어나고 있는지 알 수 있도록 붉은 색으로 칠했다.
이 작업을하는 방법에 어떤 아이디어?
감사합니다,하지만 난 알파가 작동하는 방법을 알고있다. 가장자리 주변의 색이 바랜 모양을 얻으려면 방사형 투명도가 필요합니다. – Simon
@ Simon이 도움이 될 수도 있습니다. http://stackoverflow.com/questions/8481322/create-a-radial-gradient-programmatically – Elior
글쎄, 다른 접근 방식을 사용하여 답변을 찾았지만,이 시간을 보내 주셔서 감사합니다. . +1. 감사. – Simon