2016-07-03 7 views
1

4色のグラデーションで塗りつぶされたアークを持つカスタムビューを描画しようとしています。これに適したSweepGradientを選択しました。それは2つの色のためにうまく動作し、さらに色を追加しても、私は他の2つの色を取得することはできません。私はポジションのさまざまな組み合わせを試みましたが、何も動作していないようです。複数色のスウィープグラデーションを使用してカスタムビューで円弧を描く

  int colorRes[] = {R.color.yellow, R.color.green,R.color.oragne, R.color.red};  
     float stops[] = {0,0.3f,0.6f,1}; 
     int colors[] = new int[colorRes.length]; 
      for(int i=0;i<colorRes.length;i++){ 
       colors[i]= context.getResources().getColor(colorRes[i]); 
      } 
     Shader gradient = new SweepGradient (wdith/2,height/2, colors, stops)); 
     lighted.setShader(gradient); 
     canvas.drawArc(rectf, 130, 280, false, lightRed); 

答えて

0

私にも同様の問題がありました。そして、それは私の側に起こった理由はされて - だから、現実にこれを行う際に、幅と高さが0

た -

new SweepGradient (wdith/2,height/2, colors, stops)); 

私はこれを得た -

new SweepGradient (0,0, colors, stops)); 

そうであることを幅と高さが0でないことを確認してください。私はこのようにしました -

@Override 
    public void onDraw(Canvas canvas) { 
     if (mShader == null) { 
      float cX = getWidth()/2F; 
      float cY = getHeight()/2F; 
      mShader = new SweepGradient(cX, cY, getRingColors(), null); 
     } 
     testPaint1.setShader(mShader); 
     canvas.drawCircle(getWidth()/2, getHeight()/2, getResources().getDimensionPixelSize(R.dimen.status_ring_dimen), testPaint1); 
    } 



private int[] getRingColors() { 
     return new int[]{ 
       getResources().getColor(R.color.md_blue_500), 
       getResources().getColor(R.color.md_red_400), 
       getResources().getColor(R.color.md_green_500), 
       getResources().getColor(R.color.md_blue_500) 
// the first and last color should be the same to get a smooth transition of colors 

     }; 
    } 
0

実際の問題は、まだ固定されていないスタジオ。

問題をご覧下さいレイアウトプレビューでSweepGradientのレンダリングがとして実際のデバイスでそれがうまく働いていたAndroidのメーカーに失敗しhere

を報告しました。

実際のデバイスでカスタムビューをテストするのは常に良いことがわかりました。

関連する問題