现在新版360手机助手的界面都做得挺漂亮的,在切换底部导航时的波纹效果也很好看,刚好最近看了个开源项目才了解到原来Drawable做动画效果也怎么好用,所以就仿照360实现了下带波纹的TabHost。
先来看一下实现后的效果:
说明一下实现要点:
1. 因为我们项目之前用的是FragmentTabHost,所以我直接继承FragmentTabHost来实现动画效果更方便;
2. 波纹动画的实现其实是自定义带动画效果的Drawable,然后将Drawable设置为Tab菜单的背景;
3. 其它的就是一些Tab菜单切换的处理了。
一. 自定义波纹Drawable
自定义Drawable只要继承Drawable并实现以下4个方法,同时实现Animatable接口:
[java] view plain copy
- public class RippleDrawable extends Drawable implements Animatable {
- @Override
- public void draw(Canvas canvas) {
- // 绘图
- }
- @Override
- public void setAlpha(int alpha) {
- // 设置透明度
- }
- @Override
- public void setColorFilter(ColorFilter colorFilter) {
- // 设置颜色过滤
- }
- @Override
- public int getOpacity() {
- // 设置颜色格式
- return PixelFormat.RGBA_8888;
- }
- @Override
- public void start() {
- // 启动动画
- }
- @Override
- public void stop() {
- // 停止动画
- }
- @Override
- public boolean isRunning() {
- // 判断动画是否运行
- return false;
- }
- }
下面是整个波纹Drawable的实现代码:
[java] view plain copy
- /**
- * Created by long on 2016/6/27.
- * 波纹Drawable
- */
- public class RippleDrawable extends Drawable implements Animatable {
- /**
- * 3种模式:左边、中间和右边波纹
- */
- public static final int MODE_LEFT = 1;
- public static final int MODE_MIDDLE = 2;
- public static final int MODE_RIGHT = 3;
- private int mMode = MODE_MIDDLE;
- // 前景色和后景色画笔
- private Paint mPaintFront;
- private Paint mPaintBehind;
- // 用来绘制扇形的矩形框
- private RectF mRect;
- // 目标View的宽高的一半
- private int mHalfWidth;
- private int mHalfHeight;
- // 扩散半径
- private int mRadius;
- // 前景色和背景色的分割距离
- private int mDivideSpace;
- // 扩散满视图需要的距离,中点到斜角的距离
- private int mFullSpace;
- // 动画控制
- private ValueAnimator mValueAnimator;
- public RippleDrawable(int frontColor, int behindColor, int mode) {
- mPaintFront = new Paint(Paint.ANTI_ALIAS_FLAG);
- mPaintFront.setColor(frontColor);
- mPaintBehind = new Paint(Paint.ANTI_ALIAS_FLAG);
- mPaintBehind.setColor(behindColor);
- mRect = new RectF();
- mMode = mode;
- }
- @Override
- public void draw(Canvas canvas) {
- if (mRadius > mHalfWidth) {
- int count = canvas.save();
- canvas.drawCircle(mHalfWidth, mHalfHeight, mHalfWidth, mPaintBehind);
- canvas.restoreToCount(count);
-
count = canvas.save(); &
上一篇:Android炫酷的Activity切换效果,共享元素
下一篇:一款与Android支持库兼容的ViewPager交互式分页指示器小部件-
一款与Android支持库兼容的ViewPager交互式分页指示器小部件
一款与Android支持库兼容的ViewPager交互式分页指示器小部件 交互式分页指示器小部件,与 ViewPager Android支持库 兼容 。 用法 有关此项目的工作实现,请参阅该 sample/ 文件夹。 在您的 build.gradle 文件中 包含以下依赖项 。 compile com.jpardogo.mate
-
Android炫酷的Activity切换效果,共享元素
Material-Animations-CN 此篇 API 均为 Android 5.0(API 级别 21) 以上才可支持。 此demo一共分为四部分: 1.1 普通过渡 Transition; 1.2 Shared Elements Transition 共享元素; 2.0 TransitionManager 控制动画; 3.0 ViewAnimationUtils 显示或隐藏效
-
Android自定义View--Flyme6的Viewpager指示器源码
最新更新的Flyme6整体效果不错,动画效果增加了很多了,看了看flyme6的Viewpager指示器,觉得有点意思,就模仿写了一下,整体效果如下: allprojects { repositories { maven { url https://jitpack.io } }}dependencies { compile com.github.Dawish:FlymeT
-
Indicator 取代 tabhost,实现网易顶部tab,新浪微博主页底部tab
ViewPagerIndicator 1. 支持自定义tab样式 2. 支持自定义滑动块样式和位置 3. 支持自定义切换tab的过渡效果 4. 支持子界面的预加载和界面缓存 5. 支持设置界面是否可滑动 6. android:minSdkVersion=8 android:targetSdkVersion=25 7.导入方式 1gradle导入 co
-
FragmentTabHost + ViewPager实现的Android底部Tab
FragmentTabHost FragmentTabHost + ViewPager实现Android底部Tab,并避免Fragment之间切换时每次都会调用onCreateView方法,导致每次Fragment的布局都重绘。 Screenshot:
- php论坛
- 个人网站模板下载
- 网页 模板
- 下载网站源码
- html个人主页模板
- 中国源码
- 个人博客模板
- 网页源文件
- 开源网店
- 免费个人网站模板
- 门户网站源码
- 模板之家
- 公司网站模板
- 网络编程技术
- 模板下载
- 安卓源码
- 源码站
- 个人网站设计模板
- 网页模板
- 蜘蛛bt
- 商业源码
- 源码天空
- 网站源码下载
- 源代码
- 源码大全
- 源码
- 网页在线客服代码
- 学生学籍管理系统
- html代码大全
- 免费源码下载
- php问答系统下载
- 网页游戏源码
- 免费论坛
- 网站源码出售
- 素材解析平台
- 苹果cms10模板
- 图片代码
- 网页框架
- asp网站建设
- 网站源代码下载
- 手机源码
- asp.net源码
- 导航菜单代码
- php cms
- asp下载
- discuz下载
- 办公管理系统
- jquery api
- 源码网站
- css代码
-
一款与Android支持库兼容的ViewPager交互式分页指示器小部件