2013-12-20 9 views
5

キャンバスとペイントを使って小さなローディングサークルを作った。 これは、私が間違って使ったかもしれないので、これらのクラスを使用する私の最初の試みです。キャンバス上でより良い解像度でペイントを描く? (Android)

私の問題は、絵画の解像度が低すぎるということです。私はピクセルをはっきりと見ることができます。

Here is the picture you can see.

は、どのように私はこれを改善するだろうか?ところで

これは私のクラスである。このような

public class LoadingCircle extends LinearLayout { 

public LoadingCircle(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    setWillNotDraw(false); 
} 

// time 
int countDownTime = 180; 

Paint paint = new Paint(); 
RectF oval = new RectF(); 
Path path = new Path(); 

// value 
int value = 360/countDownTime; 
// starting progress 
int progress = -360 - value; 

@Override 
public void onDraw(Canvas canvas) { 

    super.onDraw(canvas); 

    float width = (float) getWidth(); 
    float height = (float) getHeight(); 

    float center_x = width/2, center_y = height/2; 

    float loadingRadius = (float) ((width/2)*0.85); 

    float whiteRadius = (float) (loadingRadius * 1.06); 
    float greenRadius = (float) (loadingRadius * 1.14); 

    // **background green circle**/ 

    oval.set(center_x - greenRadius, center_y - greenRadius, center_x + greenRadius, center_y + greenRadius); 
    paint.setColor(Color.parseColor("#a3d47b")); 
    paint.setStyle(Paint.Style.FILL_AND_STROKE); 
    canvas.drawArc(oval, 270, 360, true, paint); 

    // ****// 

    // **background green circle**/ 

    oval.set(center_x - whiteRadius, center_y - whiteRadius, center_x + whiteRadius, center_y + whiteRadius); 
    paint.setColor(Color.parseColor("#ffffff")); 
    paint.setStyle(Paint.Style.FILL_AND_STROKE); 
    canvas.drawArc(oval, 270, 360, true, paint); 

    // **Loading circle**// 

    path.addCircle(center_x, center_y, loadingRadius, Path.Direction.CW); 

    paint.setColor(Color.parseColor("#71b23c")); 
    paint.setStyle(Paint.Style.FILL_AND_STROKE); 

    oval.set(center_x - loadingRadius, center_y - loadingRadius, center_x + loadingRadius, center_y + loadingRadius); 

    progress = progress + value; 

    Log.i("proges: ", progress + ""); 

    canvas.drawArc(oval, 270, progress, true, paint); 

    // /**// 

} 

public void setCountDownTime(int time) { 
    this.countDownTime = time; 

    this.value = 360/countDownTime; 

    this.progress = -360 - value; 
} 

// reseting loading circle 
public void reset() { 
    this.progress = -360 - value; 
    this.invalidate(); 
} 

} 

答えて

11

宣言塗料:

final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); 

これはアンチエイリアシングを有効にし、あなたはその醜いピクセル化を取り除くでしょう。

または、あなたはあなたの関数でそれを行うことができます。

paint.setAntiAlias(true); 
+0

私は必要なものだけ、ありがとうございました。 –

+0

私の喜び。私は助けるためにここにいる。 –

関連する問題