2013-08-11 2 views

답변

3

확실히하는 SweepGradient는 다음 캔버스에 함께 원을 그립니다 사용합니다.
예제는 here입니다. 재미있어! 당신이 너무 많은 색상이 필요하지 않은 경우

, 당신은 또한 XML을 통해 정의 할 수 있습니다 :

/res/drawable/sweepgradient.xml을 :

<?xml version="1.0" encoding="utf-8"?> 

<shape xmlns:a="http://schemas.android.com/apk/res/android" 
     a:shape="oval" 
     a:dither="true"> 

    <gradient a:type="sweep" 
      a:startColor="#FFFF0000" 
      a:centerColor="#FF0000FF" 
      a:endColor="#FF00FF00" /> 

</shape> 

SweepGradient가 기본 구성 요소입니다 그래서 당신은 Javas 편안한 stacktraces에 의존 수 없습니다. 스택 추적 오류가 아닌 경우 먼저 모든 원시 구성 요소를 확인하십시오. 당신이 (뷰의 크기를 조정하는 경우) 중심이 변경되면 SweepGradient를 다시 wan't 수

import android.content.Context; 
    import android.graphics.Canvas; 
    import android.graphics.Color; 
    import android.graphics.Paint; 
    import android.graphics.SweepGradient; 
    import android.view.View; 

    public class GradientView extends View { 

    // Edit these values as you want! 
    private static int[] mColors={Color.RED, Color.GREEN, Color.BLUE}; 

    private Paint mPaint=new Paint(); 
    private boolean mSetShader=false; 

    public GradientView(Context context) { 
     super(context); 
     mPaint.setAntiAlias(true); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     float cX=getWidth()/2F, cY=getHeight()/2F; 

     if (!mSetShader) { 
      mPaint.setShader(new SweepGradient(cX, cY, mColors, null)); 
      mSetShader=true; 
     } 

     canvas.drawCircle(cX, cY, Math.min(cX, cY), mPaint); 
    } 

} 

참고 : 여기에

빠른 예입니다. 나는 단순함을 위해 추가적인 생성자와 onMeasure를 생략했다 ...

+0

고맙지 만, 나는 안드로이드를 처음 사용했다. 위 이미지에서와 같이 정확한 그라데이션을 어떻게 만들 수 있겠습니까? 두 번째 그래디언트를 추가해야합니까? –

+0

두 번째 그라디언트를 추가 할 필요는 없지만 프로그래밍 방식 (no xml)으로 진행하는 것이 좋습니다. 예제 (링크)를보고 세 번째 매개 변수로 배열의 (int) 색상을 제공하십시오. – tilpner

+0

어떤 방법으로 세 번째 매개 변수를 추가해야합니까? 어리석은 질문에 대한 미안. –