当前位置:操作系统 > 安卓/Android >>

Android ApiDemos示例解析(80):Graphics->Sweep

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] 
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); 
 mShader.setLocalMatrix(mMatrix); 
 mRotate += 3; 
 if (mRotate >= 360) { 
 mRotate = 0; 
 } 
 invalidate(); 
... 

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);
 mShader.setLocalMatrix(mMatrix);
 mRotate += 3;
 if (mRotate >= 360) {
 mRotate = 0;
 }
 invalidate();
...
}本例还可以按”D” ,”T”键来显示Paint 使用Dither (Dither定义可参见Android ApiDemos示例解析(59):Graphics->ColorFilters ) 以及不同的“扫过速度”时的显示效果:

 \
作者:mapdigit
 


 


补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,