您的位置:首页 > 其它

Apidemo 学习 Sweep

2013-12-20 21:08 295 查看
在例Android ApiDemos示例解析(77):Graphics->RoundRects 曾经涉及到SweepGradient
,和RadialGradient 渐变方向不同是: SweepGradient 颜色渐变方向非环形,而是以某点为圆心呈扇形扫过。

SweepGradient的构造函数:

public SweepGradient(float cx, float cy, int[] colors, float[] positions)

public SweepGradient(float cx, float cy, int color0, int color1)

其中cx,cy 指定圆心, color1,color0 或 colors 指定渐变的颜色 ,对于使用多于两种颜色时,还可以通过positions 指定每种颜色的相对位置,positions 设为NULL时表示颜色均匀分布。

LineerGradient, RadialGradient, SweepGradient 等类的基类为Shader (类似于GDI中的Brush类) ,Shader 定义了一个与之对应的Local Matrix ,可让Shader 做坐标变换。本例使用Shader的LocalMatrix 旋转不同的角度,形成了动画效果:

[java] view
plaincopyprint?

float x = 160;

float y = 100;

mShader = new SweepGradient(x, y, new int[] { Color.GREEN,

Color.RED,

Color.BLUE,

Color.GREEN }, null);

mPaint.setShader(mShader);



...

protected void onDraw(Canvas canvas) {

...

mMatrix.setRotate(mRotate, x, y); //围绕 x y 旋转 mrotate度

mShader.setLocalMatrix(mMatrix);

mRotate += 3;

if (mRotate >= 360) {

mRotate = 0;

}

invalidate();

...

}

本例还可以按”D” ,”T”键来显示Paint 使用Dither (Dither定义可参见Android ApiDemos示例解析(59):Graphics->ColorFilters )
以及不同的“扫过速度”时的显示效果:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: