Я пытаюсь нарисовать сглаженный сглаженный ход вокруг кнопки, заполненной градиентом, но углы становятся действительно уродливыми.Это мой код:
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);
Моя кнопка выглядит так:
Неочень хорошо, у кого-нибудь есть идеи?
Также я не хочу использовать XML-файл, так как я не уверен, что можно достичь двух градиентов с 50-процентным значением для каждой кнопки без использования dp для указания позиции градиента (так как я хочу иметь 50-50 градиентов).
Спасибо!