android动画深入解析--仿58底部导航的item动画

我们在开发android的过程中,合理使用动画能够提高用户体验,带给用户耳目一新的感觉。因此我们应该掌握android的动画使用。我在开发的过程中,很少自己写动画,在github搜基本可以满足要求,但是本着打破砂锅问到底的小强精神,知其然更要知其所以然,我决定还是好好看看文档,深入的学习一下动画吧,我始终相信在复杂的动画也是有简单的动画构成的,学好基本功。从简单到复杂。

首先我去看看了官方的文档,大概要学的东西就是这些。

AccelerateDecelerateInterpolator

AccelerateInterpolator

AlphaAnimation

Animation

Animation.Description

AnimationSet

AnimationUtils

AnticipateInterpolator

AnticipateOvershootInterpolator

BounceInterpolator

CycleInterpolator

DecelerateInterpolator

GridLayoutAnimationController

GridLayoutAnimationController.AnimationParameters

LayoutAnimationController

LayoutAnimationController.AnimationParameters

LinearInterpolator

OvershootInterpolator

RotateAnimation

ScaleAnimation

TranslateAnimation

整理了一下,animation的结构如下:

官方给我们提供的动画类型,看图一目了然,当然还有属性动画,之后再说。官方给我了我们这些基础动画,配上一下各种(Interpolator)加速器,组合成很多酷炫的动画。今天我们要细致说的是tweend animation中的RotateAnimation。

参照上图,默认的旋转点是view的(0,0),顺时针旋转角度为正,逆时针角度为负,开始角度fromDegrees,结束角度toDegrees。比如:

fromDegree 为30,toDegrees为60,那么旋转的角度是60-30 = 30。

fromDegrees为30,投Degrees为-30,那么旋转的角度是30-(-30)= 60

说清楚的角度的问题,再来讲旋转点,如何控制旋转点的位置呢?

public RotateAnimation (float fromDegrees, float toDegrees, float pivotX, float pivotY)

看一下构造函数,RotateAnimation 用 float pivotX, float pivotY这两个参数来控制旋转点。比如pivotX设为50%,pivotY设为50%,意思就是围绕view本身的中心旋转。

下面我们看一个example,58同城app上底部导航栏的item动画。很简单的一个动画,但是用着一点都不违和,很有耳目一新的感觉。

下面给出xml代码:

cycle_shake.xml

<?xml version="1.0" encoding="utf-8"?>
<cycleInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
    android:cycles="3" />

这个cycleInterpolator 是用来重复动画3次。

shake.xml

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:pivotX="50%"
    android:pivotY="0%"
    android:fromDegrees="5"
    android:toDegrees="-5"
    android:duration="500"
    android:interpolator="@anim/cycle_shake"
    />

差不多了,解释一下interpolator,这是一个时间插值类,定义动画变换的速度。能够实现alpha/scale/translate/rotate动画的加速、减速和重复等。Interpolator类其实是一个空接口,继承自TimeInterpolator,TimeInterpolator时间插值器允许动画进行非线性运动变换,如加速和限速等,该接口中只有接口中有一个方法 float getInterpolation(float input)这个方法。传入的值是一个0.0~1.0的值,返回值可以小于0.0也可以大于1.0。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-16 13:12:58

android动画深入解析--仿58底部导航的item动画的相关文章

Android仿小米商城底部导航栏之二(BottomNavigationBar、ViewPager和Fragment的联动使用)

简介 在前文<Android仿小米商城底部导航栏(基于BottomNavigationBar)>我们使用BottomNavigationBar控件模仿实现了小米商城底部导航栏效果.接下来更进一步的,我们将通过BottomNavigationBar控件和ViewPager空间的联动使用来实现主界面的滑动导航. 导航是移动应用最重要的方面之一,对用户体验是良好还是糟糕起着至关重要的作用.好的导航可以让一款应用更加易用并且让用户快速上手.相反,糟糕的应用导航很容易让人讨厌,并遭到用户的抛弃.为了打造

Android实习札记(5)---Fragment之底部导航栏的实现

Android实习札记(5)---Fragment之底部导航栏的实现 --转载请注明出处:coder-pig 在Part 4我们回顾了一下Fragment的基本概念,在本节中我们就来学习Fragment应用的简单例子吧! 就是使用Fragment来实现简单的底部导航栏,先贴下效果图: 看上去很简单,实现起来也是很简单的哈!那么接着下来就看下实现的流程图吧: 实现流程图: 看完流程图是不是有大概的思路了,那么接着就开始代码的编写吧: 代码实现: ①先写布局,布局的话很简单,一个FrameLayou

Android自定义TabActivity(实现仿新浪微博底部菜单更新UI)

如今Android上很多应用都采用底部菜单控制更新的UI这种框架,例如新浪微博 点击底部菜单的选项可以更新界面.底部菜单可以使用TabHost来实现,不过用过TabHost的人都知道自定义TabHost究竟是有多麻烦的,原生TabHost的风格是不依附屏幕的底部的,要依附底部就要重写布局. TabHost设置的Container可以管理UI的显示,UI可以用LayoutInflater动态生成,也可以是Activity,但不好管理Activity的生命周期.然后用TabHost控制显示UI的显示

Android Fragment解析及UI底部导航栏实例

import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.view.View; import android.view.View.OnClickListener; import and

Android开发关闭虚拟按钮、底部导航条

在Android开发中,遇到了一系列大大小小的问题,其中一个就是屏蔽底部实体键,我找了很多的博客也尝试了许许多多的方法,但始终不能屏蔽 HOME键,后来看见一篇博客说在Android 4.0以后,屏蔽底部HOME键必须反编译,修改Android底部原生代码,于是我便放弃了.废话不多说,我先分享一个屏蔽Android虚拟按键的方法,以及最简单的屏蔽Android的Back按钮,适合所有版本(未测试,感觉是这样): 1. Android 屏蔽Back按键 只需要重写 onKeyDown 方法就可以了

【Android基础篇】TabHost实现底部导航栏

在App应用中,导航栏往往是用于解决功能分块的最佳控件,而底部导航栏更是导航栏中最常用的,因为它位于屏幕底部,用户操作起来会很方便. 下面介绍一下使用Android控件TabHost实现底部导航栏的方法. TabHost可以在控件库里直接拖到页面上,非常方便,但拖出来的是顶部导航栏,如下图所示: 到这里就可以开始实现底部导航栏了,我们首先转到它的XML布局代码里,然后修改成下面这样: <FrameLayout xmlns:android="http://schemas.android.co

android开发(1):底部导航条的实现 | navigation tab | activity的创建

底部导航条,在iOS中叫tabbar,在android中叫bottombar或bottom navigation,是一个常用的切换页面的导航条. 同样,如果有良好的第三方库,我们应该优先考虑,能用好别人的东西,已经很厉害. github上的roughike/BottomBar,曾经是热度较高的库,但是已经过时了,没有再维护,加到项目也会遇到编译的问题,所以这里不使用,这里使用的是PagerBottomTabStrip,地址是:https://github.com/tyzlmjj/PagerBot

android开发(1):底部导航条的实现 | navigation tab

底部导航条,在iOS中叫tabbar,在android中叫bottombar或bottom navigation,是一个常用的切换页面的导航条. 同样,如果有良好的第三方库,我们应该优先考虑,能用好别人的东西,已经很厉害. github上的roughike/BottomBar,曾经是热度较高的库,但是已经过时了,没有再维护,加到项目也会遇到编译的问题,所以这里不使用,这里使用的是PagerBottomTabStrip,地址是:https://github.com/tyzlmjj/PagerBot

Android界面,固定顶部、底部导航。中间可滑动

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="match_parent" android:layout_width="match_parent" android:b