动画效果是开发中不必可少的东西。去搜索多了那些炫酷的动画效果。忽然觉得有必要整理一下基础的东西。不然时间长了就会丢在曾经的笔记深处,一旦忘记就再也记不起。
而对于安卓动画效果,总体来说分为两种。
视图动画
属性动画
View Animation视图动画:只是实现动画效果,对view本身的属性并没有影响。视图动画包括帧动画以及补间动画。
Property Animation 属性动画:通过动画的变换效果执行改变当前view的属性。
由于电脑较卡,用as敲出效果并运行总是让人想要放弃。索性对着笔记,整理出流程。不再加以实现效果
Frame 帧动画:
app应用场景:页面未加载出来之前的动画效果,GIF图片
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/image1"
android:duration="200">
</item>
<item android:drawable="@drawable/image2"
android:duration="200">
</item>
<item android:drawable="@drawable/image3"
android:duration="200">
</item>
<item android:drawable="@drawable/image4"
android:duration="200">
</item>
</animation-list>
1、在res/drawable文件夹下常见帧动画的xml资源文件,代码如上
android:oneshot=”false” 值为false可以播放多次,为true只播放一次
android:duration=”200” 值为毫秒值,延迟时间
2、在activity中获取ImageView控件,调用setBackgroundResource将动画的xml文件设置为ImageView的背景。
3、调用ImageView
Tween补间动画实现
1.透明度的改变淡入淡出 alpha
2.缩放 宽高尺寸 scale
3.平移 rotate
4.旋转 translate
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
//透明度
<alpha android:fromAlpha="#起始透明度"
android:toAlpha="结束透明度">
</alpha>
//缩放
<scale android:fromXScale="起始x"
android:fromYScale="起始Y"
android:toXScale="结束X"
android:toYScale="结束Y"
android:pivotX="缩放中心x"
android:pivotY="缩放中心Y">
</scale>
//旋转
<rotate android:fromDegrees="起始角度"
android:toDegrees="结束角度"
android:pivotX="圆心X"
android:pivotY="圆心Y">
</rotate>
//平移
<translate android:fromXDelta="起始X"
android:fromYDelta="起始Y"
android:toXDelta="结束X"
android:toYDelta="结束Y">
</translate>
</set>
1、在res下创建anim文件夹,补间动画的xml放到改文件夹下
2、Animation animation = AnimationUtils.LoadAnimation(上下文,R.ainm.XXX);
imageView.startAinmation(animation);
属性动画:
可以用xml定义动画效果:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimato android:propertyName="属性动画操作的属性"
android:valueType="操作属性值的类型"
android:valueFrom="操作动画的起始值"
android:valueTo="操作动画的结束值"/>
</set>
1、在项目的res文件夹下创建animation文件夹,存放属性动画的xml文件
2、设置一个或者多个属性
3、在java代码中使用
Animation animation=AnimationInflater.loadAnimation(上下文,R.animation.x);
animation.setTarget(需要使用动画的view对象);
animation.start();
也可以用Java代码事项属性动画:
1、单一属性设置:
ObjectAnimator animator =ObjectAnimation.ofFloat
(使用动画的view对象,需要设置的动画属性,需要动画的属性的取值);
animation.setTarget(需要使用动画的view对象);
animation.start();
2、多个属性的设置
ObjectAnimation animation1=ObjectAnimation.ofFloat();
ObjectAnimation animation2=ObjectAnimation.ofFloat();
AnimatorSet set=new AnimatorSet();
set.paly(animator1).after(animator2);
//android:ordering="sequentially"
set.paly(animator1).with(animator2);
//android:ordering="together"
set.start();
终于算是整理了一些有用的东西。慢慢的发现,其实基础太过于重要,也太容易在所谓前进的道路上被忽略掉。总算是克服了一下懒癌。算是最近除了看完一本《月亮与六便士》以外。最有意义的一件事。对了前两天说好的写自定义view呢。画了个圆跟曲线就懒得写了。好吧好吧,懒癌依旧。