44

閉じた Path オブジェクトの結果は次のようになります。

ここに画像の説明を入力

それは四角形ですが、閉じたパスで機能するものを探しています。

4

2 に答える 2

81

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);
}
于 2010-11-04T00:19:27.653 に答える
32

これは役立つかもしれません。

注: onDraw を呼び出すたびに Paint などを作成するのは効率的ではありません。これは、LinearGradient シェーダーの単なるデモンストレーションです

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);
}   
于 2010-05-28T06:06:49.257 に答える