圆形波动效果按钮
2016-12-28 20:38
162 查看
最近做项目需要写一个圆形按钮外围有(两个两层波动效果那种)
那就只有自定义控件啦
思路:先画一个渐变颜色的圆形:
同样的画两个外围的圆形,由于后面画的图会覆盖前面的,所以最大的圆形先画
关键:使用属性动画动态更新数值
由于需要更新的数值有:外围圆形的半径,第二层圆形的半径,和颜色透明度
就需要自定义一个实体类,使用代码如下:
可以知道ValueAnimator.ofObject方法第一个参数是定义对象的变化计算方式,后面两个参数就是变化的起始值和最终值
在就是监听属性动画的数值变化来刷新控件
WaveChangeDataEvaluator的代码:
在这里只要知道fraction(0.0–1.0)代表当前属性动画进度的百分比,就知道怎么计算
总结,使用自定义属性动画ValueAnimator.ofObject来更新,自定义控件中的一些数值,来实现动态效果
那就只有自定义控件啦
思路:先画一个渐变颜色的圆形:
//设置渐变色 shader = new LinearGradient( 0, 0, 0, radius, 0xff80abe7, 0xff4c71a6, Shader.TileMode.MIRROR); paint.setShader(shader); canvas.drawOval(..,paint)
同样的画两个外围的圆形,由于后面画的图会覆盖前面的,所以最大的圆形先画
关键:使用属性动画动态更新数值
由于需要更新的数值有:外围圆形的半径,第二层圆形的半径,和颜色透明度
就需要自定义一个实体类,使用代码如下:
ValueAnimator mValueAnimator = ValueAnimator.ofObject(new WaveChangeDataEvaluator(), new WaveChangeData(0, 0, 128), new WaveChangeData(insideRadius + outsideRadius, insideRadius, 0)); mValueAnimator.setRepeatCount(ValueAnimator.INFINITE); mValueAnimator.setRepeatMode(ValueAnimator.RESTART); mValueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { WaveChangeData currentWaveChangeData = (WaveChangeData) animation.getAnimatedValue(); outsideRadiusChange = currentWaveChangeData.outsideRadiusChange; insideRadiusChange = currentWaveChangeData.insideRadiusChange; alphaChange = currentWaveChangeData.alpha; invalidate(); } }); mValueAnimator.setInterpolator(new LinearInterpolator()); mValueAnimator.setDuration(1500); mValueAnimator.start();
可以知道ValueAnimator.ofObject方法第一个参数是定义对象的变化计算方式,后面两个参数就是变化的起始值和最终值
在就是监听属性动画的数值变化来刷新控件
WaveChangeDataEvaluator的代码:
public class WaveChangeDataEvaluator implements TypeEvaluator { @Override public Object evaluate(float fraction, Object startValue, Object endValue) { WaveChangeData start = (WaveChangeData) startValue; WaveChangeData end = (WaveChangeData) endValue; float outsideRadiusChange = start.outsideRadiusChange + (fraction * (end.outsideRadiusChange - start.outsideRadiusChange)); float insideRadiusChange = start.insideRadiusChange + (fraction * (end.insideRadiusChange - start.insideRadiusChange)); int alpha = start.alpha + (int) (fraction * (end.alpha - start.alpha)); WaveChangeData result = new WaveChangeData(outsideRadiusChange, insideRadiusChange, alpha); return result; } }
在这里只要知道fraction(0.0–1.0)代表当前属性动画进度的百分比,就知道怎么计算
总结,使用自定义属性动画ValueAnimator.ofObject来更新,自定义控件中的一些数值,来实现动态效果
相关文章推荐
- 【转】Android使用XML Shape绘制带阴影效果的圆形按钮
- Android使用XML Shape绘制带阴影效果的圆形按钮
- Android开发:用Drawable XML绘制带阴影效果的圆形按钮
- 用Drawable XML绘制带阴影效果的圆形按钮
- Android使用XML Shape绘制带阴影效果的圆形按钮
- Android使用XML Shape绘制带阴影效果的圆形按钮
- 用Drawable XML绘制带阴影效果的圆形按钮
- <转>Android开发:用Drawable XML绘制带阴影效果的圆形按钮
- 精美的圆形按钮效果
- 简单实现安卓圆形按钮及(圆形)波纹效果
- Android使用XML Shape绘制带阴影效果的圆形按钮
- 长按圆形按钮结束事件,有颜色变化的效果,有源码
- Android使用XML Shape绘制带阴影效果的圆形按钮
- Android开发:用Drawable XML绘制带阴影效果的圆形按钮
- iOS圆形按钮
- android仿IOS按钮点击效果,一张图片实现
- 基于JS+Canves实现点击按钮水波纹效果
- Android中ImageButton自定义按钮的按下效果的代码实现方法,附网上2种经典解决方法。
- css3 做一个会动的菜单 menu 按钮动画效果