2013-08-23 4 views
1

기본적으로 나는 O 형을 그리려합니다. (배경색을 맞추는 것 외에) 어떤 방법으로도 그것을 만들 수있어서 두 개의 타원형을 그릴 수 있고 캔버스의 중앙 타원형이 활동의 ​​배경에 투명하게 표시되도록 할 수 있습니까? 여기Android 캔버스에서 타원형 섹션 제거

는 내가 지금까지 무엇을 가지고 :

protected void onDraw(Canvas canvas) { 

    if(mainTimerAngle - 90 < 0){ 
     mainTimerAngle += 270; 
    } 

    canvas.drawArc(new RectF(0, 0, canvas.getWidth(), canvas.getHeight()), 
              -90, mainTimerAngle-90,true, mainTimerPaint); 

    canvas.drawOval(new RectF(barWidth, barWidth, canvas.getWidth() - barWidth, 
             canvas.getHeight() - barWidth), backgroundPaint); 

} 

답변

1

예, 할 수 있습니다, 내부 타원형의 PorterDuff.Mode.Clear 모드 설정으로 Paint 인스턴스를 사용하여.

CLEAR 모드는 기본적으로 그려지는 픽셀을 지 웁니다. 결과적으로 View의 배경과 직접적으로 반대되는 전용 Bitmap에서 그림을 그리기를 원할 것입니다. 그렇지 않으면 백그라운드를 직접 지우면 블랙홀이 생기는 것을 알 수 있습니다.

다음은 유용한 리소스에 대한 링크입니다. 다양한 모드와 시각적 결과에 대한 개요를 제공합니다. PorterDuff Modes and Android

  • Alpha Compositing @ Wikipedia
  • 당신이 안드로이드 SDK 폴더에서 찾을 수 있어야 API 데모에서 사용할 수있는 몇 가지 예제 코드도 있습니다

    +0

    질문 ondraw 메서드에서 캔버스로이 작업을 수행하려면 어떻게해야합니까? 비트 맵을 설정하려고하면 지원되지 않는 연산 예외가 발생합니다. – Landister

    +0

    아이디어는 드로잉을위한 전용'Bitmap'을 만들고 (다시 한번 사용할 수 있습니다), 그리고 그 비트 맵을 그리기위한 새로운'Canvas'를 만듭니다. 그 비트 맵을 그린 후, onDraw()에서 제공된 캔버스로 전체 비트 맵을 그릴 수 있습니다. 언급 된'Xfermodes.java' 파일을 살펴보면이 개념을 보여주는 예제를 발견 할 수있을 것입니다. –

    +0

    @Landister : 다소 지연되었을 수도 있지만, 위의 대안으로, 아마도 Canvas.saveLayer() 메소드 중 하나를 사용하여 화면 외부 비트 맵을 그릴 수 있습니다. –