Android 动画

一、Drawable目录(res/drawable)

1、bitmap ,位图

<bitmap xmlns:android="http://schemas.android.com/apk/res/android"

android:antialias="true"

android:dither="true"

android:src="@drawable/wang"

android:tileMode="mirror">   </bitmap>

tileMode: 平铺属性  antialias:抗锯齿  dither:抗抖动

mirror 镜像  图片有倒立面    repeat 重复  图片重复填充

clamp  边缘拉伸  效果奇怪  disable 默认 图片默认显示


2、clip,图片裁剪

<clip xmlns:android="http://schemas.android.com/apk/res/android"

android:drawable="@color/colorPrimary"

android:clipOrientation="horizontal"

android:gravity="left"> </clip>

clipOrientation:裁剪方向  gravity:裁剪起始位置

在代码实现裁剪,通过调用setLevel(),取值0~10000,0完全不见,10000完全显示

mDrawable= (ClipDrawable)mImageView.getDrawable();

mDrawable.setLevel(5000);


3、inset,插入图片

<inset xmlns:android="http://schemas.android.com/apk/res/android"

android:drawable="@color/colorPrimary"

android:insetLeft="50dp"

android:insetRight="50dp"

android:insetTop="50dp"

android:insetBottom="50dp"> </inset>

边距:insetLeft,insetRight,insetTop,insetBottom


4、layer,图层,列表最后一个绘制在最上层

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

<item android:left="20dp" android:top="20dp">  

<bitmap   android:gravity="center"   android:src="@drawable/wang"/>

</item>

<item android:left="20dp" android:top="20dp">

<bitmapandroid:gravity="center"android:src="@drawable/wang"/>

</item>   </layer-list>


5、lever-list ,等级列,显示对应等级的图片

<level-list xmlns:android="http://schemas.android.com/apk/res/android">

<item android:drawable="@drawable/close" android:minLevel="6" android:maxLevel="10" />

<item android:drawable="@drawable/open" android:minLevel="12" android:maxLevel="20"/>

</level-list>  

代码实现:

<ImageView   android:id="@+id/level"   android:src="@drawable/level"

android:layout_width="wrap_content"    android:layout_height="wrap_content" />

mImageView.setImageLevel(8);


6、scale,图片缩放

<scale xmlns:android="http://schemas.android.com/apk/res/android"

android:drawable="@drawable/wang" android:scaleGravity="center"

android:scaleWidth="50%"   android:scaleHeight="50%"  > </scale>


7、shape,图片形状

<shape xmlns:android="http://schemas.android.com/apk/res/android"

android:shape="rectangle">

<solid  android:color="@color/colorAccent"/>

<corners  android:radius="32dp"/>

<stroke   android:width="12dp"   android:color="@color/colorPrimary"

android:dashGap="12dp"    android:dashWidth="12dp"/>  </shape>


8、selector,监听控件状态

<selector  xmlns:android="http://schemas.android.com/apk/res/android">

<item  android:state_pressed="true"  android:drawable="@drawable/wang0"/>

<item  android:state_focused="true"  android:drawable="@drawable/wang5"/>

<item  android:drawable="@color/colorPrimary"/>   </selector>


9、shape和selector结合使用

<?xml version="1.0" encoding="utf-8"? >

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item>

<shape android:shape="rectangle">

<corners /> <stroke /> <solid />

</shape>

</item>

</selector>

10、transition ,两张图片间透明度的渐变

<transition  xmlns:android="http://schemas.android.com/apk/res/android">

<item  android:drawable="@drawable/close">

<item  android:drawable="@drawable/open"> </transition>


11、animation-list 逐帧动画

<animation-list  xmlns:android="http://schemas.android.com/apk/res/android">

<item  android:drawable="@drawable/v_anim1"  android:duration="300"/>

<item  android:drawable="@drawable/v_anim2"  android:duration="300"/>

<item  android:drawable="@drawable/v_anim3"  android:duration="300"/>

</animation-list>

代码实现:

播放动画


控制动画的播放与暂停

二、Interpolator 补间动画(res/anim)

1、AlphaAnimation

xml实现


代码实现

2、ScaleAnimation


xml实现
代码实现

3、TranslateAnimation


xml实现
代码实现

4、RotateAnimation


xml实现
代码实现

5、插值器(负责补间动画的平滑过渡)

xml文件:android:interpolator="@android:anim/accelerate_decelerate_interpolator"


插值器家族
Interpolator负责控制动画的变化速度

6、直接使用插值器

为动画设置插值器

7、动画执行监听回调

设置动画执行监听器

8、ViewPropertyAnimator的用法

view中的方法,例如:textview.animate().alpha(0f); 

注意:在xml里配置动画属性的时候,有很多属性没有在输入参数列里提示,需要自己手写输入,例如时间 android:duration="",单位毫秒,根据自己的需求手动输入各种隐藏属性。


三、Property Animator 属性动画(res/animator)

1、ValueAnimator

基本用法,四种类型 of(int,float,argb,object):

ValueAnimator valueAnimator = ValueAnimator.ofInt(0, 100);

这里引入TypeEvaluator(实现类IntEvaluator ,FloatEvaluator,ArgbEvaluator),Evaluator用来控制属性动画如何计算每时刻的属性值

2、ObjectAnimator (ValueAnimator子类)

ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(viewGroup, "translationY", toY);

objectAnimator.setDuration(500).start();

xml中定义的动画
在代码中调用xml中的动画效果

3、动画同时执行

同时执行动画方案一
同时执行动画方案二

4、动画执行监听回调

设置动画执行监听器

4、自定义动画效果

泛型动画效果

四、Transistion Animation 过渡动画(res/transition )

简介:本质是属性动画,实现了二次封装,方便开发者实现Activity或View的过渡动画效果,过渡动画的使用很简单,首先需要准备过渡动画前后两个不同的布局文件,这两个布局文件的根布局具有相同的id属性值。

1、过渡动画


过渡动画Manager
过渡动画效果

2、实现步骤:


代码实现

五、ColorSelect(res/color)

<xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android" android:enterFadeDuration="500">

<item android:state_pressed="true" android:color="@color/color_fff" />

</selector>


六、涟漪效果(Ripple)

有边界的涟漪效果:

android:background="?android:attr/selectableItemBackground"

无边界的涟漪效果:

android:background="?android:attr/selectableItemBackgroundBorderless"

自定义涟漪效果:

<ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/color_333">

<item>

    <shape android:shape="rectangle">

        <corners android:radius="@dimen/dimen_px_60" />

        <solid android:color="@color/color_fff"/>

        <stroke android:color="@color/color_c70017" 

                    android:width="@dimen/dimen_px_01"/>

    </shape>

</item>

记得设置控件为可点击状态:

android:clickable="true"


七、显示效果(Reveal)

Animator animator = ViewAnimationUtils.createCircularReveal(mImageView,centerX,centerY,startRadius,endRadius);

animator.setDuration(1000);

animator.start();


八、常见问题

Selector的item状态失效,情况1:item的顺序问题,默认的显示效果需要放在最后。情况2:View的本身是否有item中监听的状态,如state_check,Checkbox有该属性,而Button没有该属性,所以Checkbox生效,而Button则不生效。情况3:view的本身有item中监听的状态,但设置后不生效,需要为View设置对应的监听,如state_press,TextView本身有该属性,但按下没有反应,为TextView设置View.OnClickListener后,TextView的state_press状态监听生效,或者在控件添加android:clickable="true"属性。

动画执行后遗留问题,建议使用最新的动画API,如:Animator(三) > Animation(四) > Interpolator(二)。

动画移动的参数坐标是以控件左上角坐标为基准。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容