Как программно нарисовать плавный ход вокруг кнопки в Android? - PullRequest
0 голосов
/ 31 октября 2011

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

import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.Shape;

public class StrokeShapeDrawable extends ShapeDrawable {
    Paint fillpaint;
    Paint strokepaint;
    private static final int WIDTH = 1;

    public StrokeShapeDrawable(Shape s) {
        super(s);
        fillpaint = this.getPaint();
        strokepaint = new Paint(fillpaint);
        strokepaint.setAntiAlias(true);
        strokepaint.setStyle(Paint.Style.STROKE);
        strokepaint.setStrokeWidth(WIDTH);
        strokepaint.setARGB(255, 0, 0, 0);
    }

    @Override
    protected void onDraw(Shape shape, Canvas canvas, Paint fillpaint) {
        shape.draw(canvas, fillpaint);
        shape.draw(canvas, strokepaint);
    }

    public void setFillColour(int c) {
        fillpaint.setColor(c);
    }
}

И создание кнопки:

    ShapeDrawable.ShaderFactory sf = new ShapeDrawable.ShaderFactory() {
        @Override
        public Shader resize(int width, int height) {
            LinearGradient lg = new LinearGradient(0, 0, 0, mLoginBtn.getHeight(),
                new int[] { 
                    0xfff6f6f6, 
                    0xffd2d3d5, 
                    0xffc0c1c4, 
                    0xffc0c1c4},
                new float[] {
                    0, 0.45f, 0.55f, 1 },
                Shader.TileMode.REPEAT);
             return lg;
        }
    };

    float[] roundedCorner = new float[] {15, 15, 15, 15, 15, 15, 15, 15};
    StrokeShapeDrawable b = new StrokeShapeDrawable(new RoundRectShape(roundedCorner, null, null));
    b.setShaderFactory(sf);
    mLoginBtn.setBackgroundDrawable((Drawable)b);

Моя кнопка выглядит так:

button

Неочень хорошо, у кого-нибудь есть идеи?

Также я не хочу использовать XML-файл, так как я не уверен, что можно достичь двух градиентов с 50-процентным значением для каждой кнопки без использования dp для указания позиции градиента (так как я хочу иметь 50-50 градиентов).

Спасибо!

1 Ответ

1 голос
/ 31 октября 2011

Это кажется мне слишком сложным способом достижения чего-то относительно простого.Вместо этого я бы использовал отрисовку из девяти патчей - они идеально подходят для вашей задачи.

...