【发布时间】:2011-02-19 15:15:08
【问题描述】:
给定一个封闭的Path对象结果是这样的:
虽然这是一个矩形,但我正在寻找适用于任何封闭路径的东西。
【问题讨论】:
-
一个绝妙的,不,绝妙的问题!
标签: android graphics path fill
给定一个封闭的Path对象结果是这样的:
虽然这是一个矩形,但我正在寻找适用于任何封闭路径的东西。
【问题讨论】:
标签: android graphics path fill
虽然 steelbytes 的回答可能会让您更好地控制渐变的各个部分,但您可以在没有路径的情况下做到这一点:
Paint m_Paint = new Paint();
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
// start at 0,0 and go to 0,max to use a vertical
// gradient the full height of the screen.
m_Paint.setShader(new LinearGradient(0, 0, 0, getHeight(), Color.BLACK, Color.WHITE, Shader.TileMode.MIRROR));
canvas.drawPaint(m_Paint);
}
【讨论】:
LinearGradient,所以你必须重新实例化它。也许不在onDraw,但在onLayout 或onMeasure。但无论如何你都会收到一个 lint 警告。
这可能会有所帮助。
注意:在每次调用 onDraw 时创建 Paint 等效率不高。这只是一个线性渐变着色器的演示
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
int w = getWidth();
int h = getHeight();
Paint p = new Paint(Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG);
Path pth = new Path();
pth.moveTo(w*0.27f,0);
pth.lineTo(w*0.73f,0);
pth.lineTo(w*0.92f,h);
pth.lineTo(w*0.08f,h);
pth.lineTo(w*0.27f,0);
p.setColor(0xff800000);
p.setShader(new LinearGradient(0,0,0,h,0xff000000,0xffffffff,Shader.TileMode.CLAMP));
canvas.drawPath(pth,p);
}
【讨论】: