Skip to content

Commit

Permalink
Update README-CN.md
Browse files Browse the repository at this point in the history
  • Loading branch information
android-cjj committed Apr 4, 2016
1 parent 04cf3d1 commit 3dd0338
Showing 1 changed file with 18 additions and 26 deletions.
44 changes: 18 additions & 26 deletions README-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ mJJSearchView.resetAnim();
![](https://camo.githubusercontent.com/b6808c86f8456b9f9e2b34d88108ecb6476fdab7/687474703a2f2f7777772e61706b6275732e636f6d2f646174612f6174746163686d656e742f666f72756d2f3230313530382f30372f3136313032326f6c6d726e75696d6d66696d316d6d622e706e67)

现在大部分App都是用这种方式了。我是希望能有App把这个功能做得酷炫点,毕竟它也是用户经常要用到的,给用户良好的体验还是很重要的。
为此,我实现了别人设计的一些SearchView酷炫效果,可能不是很像,你就勉强看看吧。
为此,我实现了别人设计的一些SearchView酷炫效果,可能不是很精致,你就勉强看看吧。

图一:

Expand All @@ -137,15 +137,21 @@ mJJSearchView.resetAnim();

<img src="http://ww2.sinaimg.cn/mw690/7ef01fcagw1f2gzz0xbkfg20an05hq47.gif" width="380">

还有几种效果就不贴图了,你可以上我Github瞧瞧的。
还有几种效果就不一一贴图了,你可以上我Github瞧瞧的。

此时,如果你喜欢上这些酷炫的动画时,想知道他们是怎么在代码中实现的,没问题,我这就手把手教你撩一个绚丽的SearchViewAnim , 呵呵,
有点吹大了,说说我实现的思路
有点吹大了,说说我怎么实现的吧

图一的效果是SearchView是由一个圆圈和一条直线(尾巴)构成的,开启动画时,尾巴慢慢消失成一点,然后这一点 进入圆圈内时,泛起波纹,在圈内四处逗留,然后在圆圈中心点短暂的思考了人生,又冲出去乖乖做一条尾巴。
###实现思路

仔细观察图一 ,效果是SearchView是由一个圆圈和一条直线(尾巴)构成的,开启动画时,尾巴慢慢消失成一点,然后这一点(dot) 进入圆圈内时,泛起波纹,在圈内四处逗留,然后在圆圈中心点停留闪烁,短暂的思考了下人生,又冲出去乖乖做一条尾巴。

咳,这是一个顿悟生命的dot啊!

相信大家通过我形象的描述已经知道效果是怎样了,现在就把刚刚描叙的画出来吧。

###实现绘制

####(1) 自定义类SearchView继承View

重写` onDraw(Canvas canvas)`方法,利用画笔Paint在画布Canvas绘制一个普通的的视图,如下:
Expand All @@ -167,10 +173,10 @@ canvas.drawCircle(cx, cy, cr, paint);
```
这一步比较简单,就不多说了。

####(2) 实现动画效果,这里的动画有dot进入圈圈时泛起的波浪效果和dot 在圈圈内的运行轨迹
####(2) 实现动画效果,这里的动画有dot进入圈圈时泛起的波浪效果和dot在圈圈内的运行轨迹

因为运行轨迹是固定的,我们把经过的路径设置给Path,在构造`PathMeasure`函数(不知道PathMeasure用法的同学自己搜索学习),使用它两个方法`getLength()`,.可获取dot运行路径的长度,`getPosTan(float distance, float pos[],float tan[])`可根据distance可以获取dot的坐标点pos[].
写出代码就是
写成代码就是
```java
//创建0~mPathMeasure.getLength()的过度动画值
ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, mPathMeasure.getLength());
Expand All @@ -184,33 +190,19 @@ canvas.drawCircle(cx, cy, cr, paint);
}
});
```
至于dot进入圈圈时泛起的波浪效果,其实就是曲线的不断扩大而已,这里我们可以利用贝塞尔函数`quadTo()`,不断改变控制点来实现效果。

至于dot进入圈圈时泛起的波浪效果,其实就是曲线的不断扩大而已,这里我们可以利用贝塞尔函数`quadTo()`,不断改变控制点来实现该效果。

####(3)收尾Reset

图一因为结束动画之后,视图和开始时一样,所以我们并不需要绘制Reset时的动画,只需重置状态就可以了,而如果是图三那种情况,动画停止后是箭头的效果,就需要要逆着回去绘制SearchView的过程了。



















其他效果也是这样一步一步把复杂的东西简单化,最后你发现无非就是画线、画曲线、画弧、画圆这些,我就偷个懒,不讲剩下效果的的实现方式了,源码已经上传Github,自己看看可能比我吹水有用的多。

####杂谈
SearchView几乎是每个App必备的,做得炫酷点可以给用户好的体验。但是,我们都知道,一个App只能有一种风格,所以加入很多样式的动画是没必要的。我觉得你可以参考我的实现,修改成合适自己的。当然,水平有限及写的随意,该库还是有不少问题,也希望你能PR,完善它。
写这些花费的时间、精力还是挺多的,因为需要一些数学计算(我数学烂)和不断的调试才能绘制满意的效果,所以建议如果项目需要,可以在别人实现的轮子上改改就好。我们都知道,一个App只能有一种风格,所以加入很多样式的动画是没必要的,修改一种合适自己的就好。

水平有限及写的随意,该库还是有不少问题,也希望你能PR,完善它。


####关于我
Expand Down

0 comments on commit 3dd0338

Please sign in to comment.