2013-12-20 9 views
5

Ich habe einen kleinen Ladekreis mit Canvas und Paint gemacht. Dies ist mein erster Versuch, diese Klassen zu verwenden, so dass es etwas sein könnte, das ich falsch benutzt habe.Zeichnen auf Leinwand mit Farbe in besserer Auflösung? (Android)

Mein Problem ist, dass die Auflösung der Malerei zu niedrig sind. Ich kann die Pixel deutlich sehen.

Here is the picture you can see.

Wie kann ich auf diese verbessern?

Durch die Art und Weise das ist meine Klasse:

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(); 
} 

} 

Antwort

11

Declare Farbe wie folgt aus:

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

Dies wird die Anti-Aliasing aktivieren und Sie werden von diesem hässlichen pixellation loszuwerden.

Oder Sie können es in Ihrer Funktion tun:

paint.setAntiAlias(true); 
+0

Genau das, was ich brauche, danke. –

+0

Mein Vergnügen. Ich bin hier um zu helfen. –