android动画-动画分类及代码演示样例
原来一直对动画一知半解,仅仅知道依照网上的方法会用即可了,可是自己写起来感觉确实有点费劲,今天最终研究了代码实现,一下子感觉清晰多了。先把总结例如以下,代码中有具体的凝视。
动画分类
1.Peoperty Animation
这个动画是Android3.0之后推出的眼下用处不大。
2.View Animation
这类动画也叫tween animation 主要分为 渐变动画(AlphaAnimation)旋转动画(RotateAnimation)
缩放动画(ScaleAnimation)位移动画(TranslateAnimation)
3.Drawable Animation
这类动画也叫帧动画 FrameAnimation
先上tween animation
MainActivity.java
package com.example.testanimation; import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.ImageView; public class MainActivity extends Activity { private ImageView imgView; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); imgView = (ImageView)this.findViewById(R.id.imgView) ;
Button btnAlpha = (Button)this.findViewById(R.id.btnAlpha) ;
btnAlpha.setOnClickListener(new AnimationOnClickListener(AnimationType.alpha));
Button btnRotate = (Button)this.findViewById(R.id.btnRotate) ;
btnRotate.setOnClickListener(new AnimationOnClickListener(AnimationType.rotate));
Button btnTraslate = (Button)this.findViewById(R.id.btnTraslate) ;
btnTraslate.setOnClickListener(new AnimationOnClickListener(AnimationType.traslate));
Button btnScale = (Button)this.findViewById(R.id.btnScale) ;
btnScale.setOnClickListener(new AnimationOnClickListener(AnimationType.scale));
Button btnComplex = (Button)this.findViewById(R.id.btnComplex) ;
btnComplex.setOnClickListener(new AnimationOnClickListener(AnimationType.complex)); } enum AnimationType {
alpha,
rotate,
traslate,
scale,
complex
} class AnimationOnClickListener implements OnClickListener { private AnimationType mAnimationType; public AnimationOnClickListener (AnimationType animationType) {
this.mAnimationType = animationType;
} @Override
public void onClick(View v) {
switch (mAnimationType) {
case alpha:
/**
* 透明度从不透明变为0.2透明度
*/
AlphaAnimation _alphaAnimation = new AlphaAnimation(1.0f, 0.2f);
_alphaAnimation.setDuration(200);
_alphaAnimation.setFillAfter(true);//动画运行完的状态显示
imgView.startAnimation(_alphaAnimation);
break;
case rotate:
/**
* RotateAnimation 以图片中点为圆心旋转360度
* params:
* pivotXType 中心点x坐标类型 RELATIVE_TO_SELF相对于自己,RELATIVE_TO_PARENT相对于父view
* pivotYType 同上
*
* pivotXValue,pivotYValue(圆心)
*
*/
RotateAnimation _rotateAnimation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
_rotateAnimation.setDuration(3000);
// _rotateAnimation.setRepeatMode(Animation.REVERSE);
imgView.startAnimation(_rotateAnimation);
break;
case traslate:
/**
* 依照图片的宽高2倍的位移移动
*/
TranslateAnimation _translateAnimation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 2f, Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 2f);
_translateAnimation.setDuration(3000);
_translateAnimation.setFillAfter(true);
imgView.startAnimation(_translateAnimation);
break;
case scale:
/**
* ScaleAnimation 以图片左上角为精巧点,依照1.5倍尺寸放大
* params:
* pivotXType 中心点x坐标类型 RELATIVE_TO_SELF相对于自己,RELATIVE_TO_PARENT相对于父view
* pivotYType 同上
* pivotXValue,pivotYValue(精巧点)
*/
ScaleAnimation _scaleAnimation = new ScaleAnimation(1.0f, 1.5f, 1.0f, 1.5f, Animation.RELATIVE_TO_PARENT, 0f, Animation.RELATIVE_TO_SELF, 0f);
_scaleAnimation.setDuration(300);
_scaleAnimation.setZAdjustment(Animation.ZORDER_TOP);
_scaleAnimation.setRepeatCount(1);
_scaleAnimation.setRepeatMode(Animation.REVERSE);//必须设置setRepeatCount此设置才生效,动画运行完毕之后依照逆方式动画返回
imgView.startAnimation(_scaleAnimation);
break;
case complex:
AnimationSet _animationSet = new AnimationSet(false);
AlphaAnimation _alphaAnimation2 = new AlphaAnimation(1.0f, 0.2f);
_alphaAnimation2.setDuration(1000);
_alphaAnimation2.setRepeatCount(1);
_alphaAnimation2.setRepeatMode(Animation.REVERSE);
// _alphaAnimation2.setFillAfter(true);//设此地方不好使,必须设置到AnimationSet中 TranslateAnimation _translateAnimation2 = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 2f, Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 2f);
_translateAnimation2.setDuration(1000);
_translateAnimation2.setRepeatCount(1);
_translateAnimation2.setRepeatMode(Animation.REVERSE);
// _translateAnimation2.setFillAfter(true); _animationSet.addAnimation(_alphaAnimation2);
_animationSet.addAnimation(_translateAnimation2);
_animationSet.setFillAfter(true);
// _animationSet.setRepeatCount(1);
// _animationSet.setRepeatMode(Animation.REVERSE);//这两个属性设此地不好使,必须单个设置 imgView.startAnimation(_animationSet);
break; default:
break;
} }
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} }
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <ImageView
android:id="@+id/imgView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" /> <Button
android:id="@+id/btnAlpha"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="alpha" /> <Button
android:id="@+id/btnRotate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="rotate" /> <Button
android:id="@+id/btnTraslate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="traslate" /> <Button
android:id="@+id/btnScale"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="scale" /> <Button
android:id="@+id/btnComplex"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="animationSet" /> </LinearLayout>
以下为frame animation
public class FrameAnimationAcitvity extends Activity {
private ImageView imageView;
private AnimationDrawable ad;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.animation_list);
Button button=(Button)findViewById(R.id.button1);
imageView=(ImageView)findViewById(R.id.imageView1);
imageView.setBackgroundResource(R.drawable.framedrawable);
ad=(AnimationDrawable)imageView.getBackground();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ad.start();
}
});
}
}
framedrawable.xml
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@drawable/grid_liushui" android:duration="200"/>
<item android:drawable="@drawable/grid_payout" android:duration="200"/>
<item android:drawable="@drawable/grid_report" android:duration="200"/>
</animation-list></span>
附上tween动画的源代码下载链接
android动画-动画分类及代码演示样例的更多相关文章
- java 覆盖hashCode()深入探讨 代码演示样例
java 翻盖hashCode()深入探讨 代码演示样例 package org.rui.collection2.hashcode; /** * 覆盖hashcode * 设计HashCode时最重要 ...
- Python Web框架Tornado的异步处理代码演示样例
1. What is Tornado Tornado是一个轻量级但高性能的Python web框架,与还有一个流行的Python web框架Django相比.tornado不提供操作数据库的ORM接口 ...
- Android通过startService播放背景音乐简单演示样例
关于startService的基本使用概述及其生命周期可參见博客<Android中startService的使用及Service生命周期>. 本文通过播放背景音乐的简单演示样例,演示sta ...
- Swift语言 简明基础 代码演示样例
开发环境: Mac.Xcode6.0 下面内容均可创建ios common line项目来測试 1.Hello World演示样例 使用xcode创建新的common line项目,查看主文件main ...
- 使用Android编写录制视频小程序演示样例
主要实现录制功能的类:Camera类和MediaRecorder类.功能描写叙述:首先进入视频录制界面,点击录像button进入录像功能界面,点击录制開始录制视频, 点击停止button,将录制的视频 ...
- Java中普通代码块,构造代码块,静态代码块的代码演示样例及区分
//运行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 当中静态代码块仅仅运行一次.构造代码块在每次创建对象是都会运行. 1 普通代码块 <span ...
- 【甘道夫】Eclipse+Maven搭建HBase开发环境及HBaseDAO代码演示样例
环境: Win764bit Eclipse Version: Kepler Service Release 1 java version "1.7.0_40" 第一步:Eclips ...
- SSL通关之代码演示样例(四)
实际开发过程中,server端是不须要多加代码处理的,由于ssl验证过程是由server(tomcat.nginx等)完毕的. 这段代码也是參考了网上的: 新建一个web项目,项目结构和须要引入的ja ...
- c语言学习之结构篇代码演示样例-输入n个同学的姓名,数学英语成绩,依照平均分从低到高排序并输出
#include<stdio.h> void main(){ const int count = 5;//定义数量 struct student{ char name[80]; float ...
随机推荐
- css3动画与js动画的一些理解
http://zencode.in/19.CSS-vs-JS%E5%8A%A8%E7%94%BB%EF%BC%9A%E8%B0%81%E6%9B%B4%E5%BF%AB%EF%BC%9F.html 首 ...
- MFC 在对话框显示图片的多种方法(四种方法)
我们先从简单的开始吧.先分一个类: (一) 非动态显示图片(即图片先通过资源管理器载入,有一个固定ID) (二) 动态载入图片(即只需要在程序中指定图片的路径即可载入) 为方便说明,我们已经建好一个基 ...
- 基于visual Studio2013解决面试题之0602全排列
题目
- VxWorks6.6 pcPentium BSP 使用说明(二):创建启动盘
本篇介绍从Solaris.Linux.Windows或VxWorks创建VxWorks启动盘的方法. 从Solaris或Linux创建启动盘 使用Solaris或Linux自带的工具/usr/bin/ ...
- hbase memstorelab
关于MemStore的补充 在通过HStore.add向store中加入�一个kv时,首先把数据写入到memstore中.这一点没有什么说明: publiclongadd(finalKeyValue ...
- EasyUI - Resizable 调整大小
效果: html代码: <div id="rr" style="width: 100px; height: 100px; border: 2px solid #cc ...
- 攻略三战的完美体验3Castle Fantisia阿兰·梅希亚战争艾伦西战记它包含重做版本(这是新的艾伦·梅希亚大战)
(城堡幻想曲3,纠正大家个错误哦,不是圣魔大战3,圣魔大战是城堡幻想曲2,圣魔大战不是个系列,艾伦西亚战记==艾伦希亚战记,一个游戏日文名:タイトル キャッスルファンタジア -エレンシア戦記-リニュー ...
- Delphi 10.1 柏林更新内容简译
新的 SDKTransform.exe 支持转换 Object-C 或 C++ 头文件到Delphi. 修改了对话框的接口,分成了同步和异步两种: http://blog.qdac.cc/?p=380 ...
- 七个你无法忽视的Git使用技巧(转)
与其他技术相比,Git应该拯救了更多开发人员的饭碗.只要你经常使用Git保存自己的工作,你就一直有机会可以将代码退回到之前的状态,因此就可以挽回那些你深夜里迷迷糊糊犯下的错误. 尽管这么说,Git的命 ...
- 分析javascript关闭
1.什么是闭包 1)官方解释 一个拥有多个变量和绑定了这些变量的环境的表达式(一般是一个函数).因而这些变量也是该表达式的一部分. 我的理解:所谓的闭包就是连接函数内部和函数外部的一座桥梁.使得在外部 ...