Android 动画

作者: 潜心之力 | 来源:发表于2017-10-25 15:22 被阅读0次

一、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(二)。

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

相关文章

网友评论

    本文标题:Android 动画

    本文链接:https://www.haomeiwen.com/subject/puenuxtx.html