1. 好运11选5计划屋首页
  2. 模块插件
  3. 小程序好运11选5计划
  4. 安卓好运11选5计划

Android实现360手机助手TabHost的波纹效果

现在新版360手机助手的界面都做得挺漂亮的,在切换底部导航时的波纹效果也很好看,刚好最近看了个开源项目才了解到原来Drawable做动画效果也怎么好用,所以就仿照360实现了下带波纹的TabHost。

先来看一下实现后的效果:

Android实现360手机助手TabHost的波纹效果

说明一下实现要点:

1. 因为我们项目之前用的是FragmentTabHost,所以我直接继承FragmentTabHost来实现动画效果更方便;

2. 波纹动画的实现其实是自定义带动画效果的Drawable,然后将Drawable设置为Tab菜单的背景;

3. 其它的就是一些Tab菜单切换的处理了。

一. 自定义波纹Drawable

自定义Drawable只要继承Drawable并实现以下4个方法,同时实现Animatable接口:

[java] view plain copy

  1. public class RippleDrawable extends Drawable implements Animatable {

  2.     @Override

  3.     public void draw(Canvas canvas) {

  4.         // 绘图

  5.     }

  6.     @Override

  7.     public void setAlpha(int alpha) {

  8.         // 设置透明度

  9.     }

  10.     @Override

  11.     public void setColorFilter(ColorFilter colorFilter) {

  12.         // 设置颜色过滤

  13.     }

  14.     @Override

  15.     public int getOpacity() {

  16.         // 设置颜色格式

  17.         return PixelFormat.RGBA_8888;

  18.     }

  19.     @Override

  20.     public void start() {

  21.         // 启动动画

  22.     }

  23.     @Override

  24.     public void stop() {

  25.         // 停止动画

  26.     }

  27.     @Override

  28.     public boolean isRunning() {

  29.         // 判断动画是否运行

  30.         return false;

  31.     }

  32. }

这几个方法中最重要的就是draw()方法了,相信自定义过View的都知道我们图形就是在这里绘制,这里也一样,其它方法在这里影响不大,最后一个方法用来设置Drawable的颜色格式。要实现动画Drawable需要实现Animatable接口,并实现3个方法如下,其实不实现这个接口也能做动画效果,但还是实现比较好。

 

下面是整个波纹Drawable的实现代码:

[java] view plain copy

  1. /**

  2.  * Created by long on 2016/6/27.

  3.  * 波纹Drawable

  4.  */

  5. public class RippleDrawable extends Drawable implements Animatable {

  6.     /**

  7.      * 3种模式:左边、中间和右边波纹

  8.      */

  9.     public static final int MODE_LEFT = 1;

  10.     public static final int MODE_MIDDLE = 2;

  11.     public static final int MODE_RIGHT = 3;

  12.     private int mMode = MODE_MIDDLE;

  13.     // 前景色和后景色画笔

  14.     private Paint mPaintFront;

  15.     private Paint mPaintBehind;

  16.     // 用来绘制扇形的矩形框

  17.     private RectF mRect;

  18.     // 目标View的宽高的一半

  19.     private int mHalfWidth;

  20.     private int mHalfHeight;

  21.     // 扩散半径

  22.     private int mRadius;

  23.     // 前景色和背景色的分割距离

  24.     private int mDivideSpace;

  25.     // 扩散满视图需要的距离,中点到斜角的距离

  26.     private int mFullSpace;

  27.     // 动画控制

  28.     private ValueAnimator mValueAnimator;

  29.     public RippleDrawable(int frontColor, int behindColor, int mode) {

  30.         mPaintFront = new Paint(Paint.ANTI_ALIAS_FLAG);

  31.         mPaintFront.setColor(frontColor);

  32.         mPaintBehind = new Paint(Paint.ANTI_ALIAS_FLAG);

  33.         mPaintBehind.setColor(behindColor);

  34.         mRect = new RectF();

  35.         mMode = mode;

  36.     }

  37.     @Override

  38.     public void draw(Canvas canvas) {

  39.         if (mRadius > mHalfWidth) {

  40.             int count = canvas.save();

  41.             canvas.drawCircle(mHalfWidth, mHalfHeight, mHalfWidth, mPaintBehind);

  42.             canvas.restoreToCount(count);

  43.             count = canvas.save(); &


本文由(好运11选5计划屋@)整理自网络,如转载请注明出处:http://www.knnrk.com/24522.html

本站发布的内容若侵犯到您的权益,请邮件联系 admin@yuanmawu.net  删除,我们将及时处理!

=========================================

本站大部分下载资源收集于网络,不保证其完整性以及安全性,请下载后自行测试。

本站资源仅供学习和交流使用,版权归资源原作者所有,请在下载后24小时之内自觉删除。

若作商业用途,请购买正版,由于未及时购买和付费发生的侵权行为,与本站无关。

发表评论

登录后才能评论

联系我们

在线咨询:点击这里给我发消息

邮件:admin@yuanmawu.net

QR code