Apidemo 学习 Sweep

在例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 plain copy print ?
  1. float x = 160;  
  2. float y = 100;  
  3. mShader = new SweepGradient(x, y, new int[] { Color.GREEN,  
  4.  Color.RED,  
  5.  Color.BLUE,  
  6.  Color.GREEN }, null);  
  7. mPaint.setShader(mShader);  
  8.    
  9. ...  
  10. protected void onDraw(Canvas canvas) {  
  11. ...  
  12.  mMatrix.setRotate(mRotate, x, y);  //围绕 x y 旋转 mrotate度
  13.  mShader.setLocalMatrix(mMatrix);   
  14.  mRotate += 3;  
  15.  if (mRotate >= 360) {  
  16.  mRotate = 0;  
  17.  }  
  18.  invalidate();  
  19. ...  
  20. }  

本例还可以按”D” ,”T”键来显示Paint 使用Dither (Dither定义可参见Android ApiDemos示例解析(59):Graphics->ColorFilters ) 以及不同的“扫过速度”时的显示效果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值