2012-09-24 8 views
4

Я рисую простой круг на холсте на Android. Теперь мне нужно заполнить его градиентными цветами, но они не очень гладкие. Это его, что я сделал:Гладкий градиент Android

protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    rectF.set(20, 20, this.get_Width() - this.get_Width()/10, this.get_Width() - this.get_Width()/10); 
    RadialGradient gradient = new RadialGradient(200, 200, 200, 0xFFFFFFFF, 
      0xFF000000, android.graphics.Shader.TileMode.CLAMP); 
    Paint mPaint = new Paint(); 
    mPaint.setDither(true); 
    mPaint.setShader(gradient); 
    canvas.drawCircle(getWidth()/2, getHeight()/2, getWidth()/3, getGradient()); 
    invalidate(); 
} 

И это результат:

readial gradient

Мой вопрос: Есть ли там какой-нибудь способ сделать HQ радиальных градиентов?

+0

Мне нужно обновить свою память, но объединение в Android в основном вызвано пиксельным форматом. Убедитесь, что вы используете ARGB_888 и видите, улучшаются ли вещи. –

ответ

1

Наконец я должен инициализировать свой объект Paint как:

Paint p = new Paint(Paint.ANTI_ALIAS_FLAG); 

Это делает границы чище.

И с ответом @Waqas сделайте цвета более гладкими.

1

Попробуйте добавить следующую строку в ваш Activity который содержит View, что делает рисунок:

@Override 
public void onAttachedToWindow() { 
    super.onAttachedToWindow(); 
    Window window = getWindow(); 
    // Eliminates color banding 
    window.setFormat(PixelFormat.RGBA_8888); 
} 
+0

Как вы сказали, это устраняет цветной бандгин, но границы все еще «странные», –