android 动画效果
动画资源
(一)、概要:
- 属性动画:Property Animation
- 帧动画:Frame Animation (Drawable Animation)
- 补间动画:Tween Animation (View Animation)
- 透明度补间动画
- 缩放补间动画
- 旋转补间动画
- 移动补间动画
publicclass MainActivity extends Activity {
private ImageView imageView_main;
private Animation animation = null; @Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); imageView_main = (ImageView) findViewById(R.id.imageView_main);
} publicvoid clickButton(View view) {
switch (view.getId()) {
case R.id.button_main_alpha:
animation = new AlphaAnimation(0.0f, 1.0f);
break;
case R.id.button_main_scale:
animation = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f,
Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 1.0f);
break;
case R.id.button_main_translate:
animation = new TranslateAnimation(0, 150, 0, 0);
break;
case R.id.button_main_rotate:
animation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF,
0.5f, Animation.RELATIVE_TO_SELF, 1.0f);
break;
default:
break;
}
animation.setDuration(3000);
imageView_main.setAnimation(animation);
}
}
publicclass MainActivity extends Activity {
private ImageView imageView_main;
private Animation animation = null; @Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); imageView_main = (ImageView) findViewById(R.id.imageView_main);
} publicvoid clickButton(View view) {
switch (view.getId()) {
case R.id.button_main_alpha:
animation = new AlphaAnimation(0.0f, 1.0f);
break;
case R.id.button_main_scale:
animation = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f,
Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 1.0f);
break;
case R.id.button_main_translate:
animation = new TranslateAnimation(0, 150, 0, 0);
break;
case R.id.button_main_rotate:
animation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF,
0.5f, Animation.RELATIVE_TO_SELF, 1.0f);
break;
default:
break;
}
animation.setDuration(3000);
imageView_main.setAnimation(animation);
}
}
一、res/anim/frame_animation.xml的代码:
<animation-listxmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true">
<itemandroid:drawable="@drawable/anim1"android:duration="50"/>
<itemandroid:drawable="@drawable/anim2"android:duration="50"/>
<itemandroid:drawable="@drawable/anim3"android:duration="50"/>
<itemandroid:drawable="@drawable/anim4"android:duration="50"/>
<itemandroid:drawable="@drawable/anim5"android:duration="50"/>
<itemandroid:drawable="@drawable/anim6"android:duration="50"/>
<itemandroid:drawable="@drawable/anim7"android:duration="50"/>
<itemandroid:drawable="@drawable/anim8"android:duration="50"/>
<itemandroid:drawable="@drawable/anim9"android:duration="50"/>
<itemandroid:drawable="@drawable/anim10"android:duration="50"/>
<itemandroid:drawable="@drawable/anim11"android:duration="50"/>
<itemandroid:drawable="@drawable/anim12"android:duration="50"/>
</animation-list>
二、MainActivity.java代码:
public class MainActivity extends Activity {
private ImageView imageView_main_show;
private AnimationDrawable animationDrawable = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView_main_show = (ImageView) findViewById(R.id.imageView_main_show);
imageView_main_show.setBackgroundResource(R.anim.frame_animation);
animationDrawable = (AnimationDrawable) imageView_main_show.getBackground();
}
public void clickButton(View view) {
switch (view.getId()) {
case R.id.button_main_start:
if (!animationDrawable.isRunning()) {
//一组动画是否只播放一次
animationDrawable.setOneShot(false);
animationDrawable.start();
}
break;
case R.id.button_main_stop:
if (animationDrawable.isRunning()) {
animationDrawable.stop();
}
break;
}
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (!animationDrawable.isRunning()) {
animationDrawable.setOneShot(false);
animationDrawable.start();
}
}
}
- Duration动画的持续时间,默认300ms。
- Time interpolation:时间插值。LinearInterpolator、AccelerateDecelerateInterpolator,定义动画的变化率。
- Repeat count and behavior:重复次数、以及重复模式;可以定义重复多少次;重复时从头开始,还是反向。
- Animator sets: 动画集合,你可以定义一组动画,一起执行或者顺序执行。
- Frame refresh delay:帧刷新延迟,对于你的动画,多久刷新一次帧;默认为10ms,但最终依赖系统的当前状态;基本不用管。
- ObjectAnimator 动画的执行类
- ValueAnimator 动画的执行类
- AnimatorSet 用于控制一组动画的执行:线性,一起,每个动画的先后执行等。
- AnimatorInflater 用户加载属性动画的xml文件
- TypeEvaluator 类型估值,主要用于设置动画操作属性的值。
- TimeInterpolator 时间插值
- 总的来说,属性动画就是,动画的执行类来设置动画操作的对象的属性、持续时间,开始和结束的属性值,时间差值等,然后系统会根据设置的参数动态的变化对象的属性。
一、res/anim/property_anim.xml的代码:
<setxmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="sequentially">
<objectAnimator
android:duration="4000"
android:propertyName="x"
android:valueTo="300"
android:valueType="intType"/>
<objectAnimator
android:duration="4000"
android:propertyName="y"
android:valueTo="400"
android:valueType="intType"/>
<objectAnimator
android:duration="4000"
android:propertyName="x"
android:valueTo="0"
android:valueType="intType"/>
<objectAnimator
android:duration="4000"
android:propertyName="y"
android:valueTo="0"
android:valueType="intType"/>
</set>
二、MainActivity.java代码:
publicclass MainActivity extends Activity {
private ImageView imageView_main_obj;
private Move move;
@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView_main_obj = (ImageView) findViewById(R.id.imageView_main_obj);
move = new Move();
imageView_main_obj.setOnClickListener(new OnClickListener() {
@Override
publicvoid onClick(View v) {
setTitle(move.getX() + ":" + move.getY());
}
});
}
class Move {
privateinty;
privateintx;
publicint getY() {
returny;
}
publicvoid setY(int y) {
this.y = y;
imageView_main_obj.layout(imageView_main_obj.getLeft(), y,
imageView_main_obj.getRight(),
y + imageView_main_obj.getMeasuredHeight());
}
publicint getX() {
returnx;
}
publicvoid setX(int x) {
this.x = x;
imageView_main_obj.layout(x, imageView_main_obj.getTop(), x
+ imageView_main_obj.getMeasuredWidth(),
imageView_main_obj.getBottom());
}
}
publicvoid clickButton(View view) {
// 装载属性动画资源
AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(this,
R.animator.property_anim);
// 设置要控制的对象
set.setTarget(move);
// 开始动画
set.start();
}
}
【备注说明:】
<objectAnimator
android:duration="4000"
android:propertyName="x"
android:valueTo="300"
android:valueType="intType"/>
- android:ordering说明一系列动画动作的执行顺序,有两个选择: sequentially 和together,顺序执行还是一起执行;
- objectAnimator 是设定动画实施的对象;
- duration是该动画动作执行从开始到结束所用的时间;
- android:repeatCount="infinite" 可以是整数或者infinite
- android:repeatMode="restart" 可以是restart 或者 reverse
- android:valueFrom=" " 整数|浮点数|颜色
android 动画效果的更多相关文章
- Android动画效果之自定义ViewGroup添加布局动画
前言: 前面几篇文章介绍了补间动画.逐帧动画.属性动画,大部分都是针对View来实现的动画,那么该如何为了一个ViewGroup添加动画呢?今天结合自定义ViewGroup来学习一下布局动画.本文将通 ...
- Android动画效果之Property Animation进阶(属性动画)
前言: 前面初步认识了Android的Property Animation(属性动画)Android动画效果之初识Property Animation(属性动画)(三),并且利用属性动画简单了补间动画 ...
- Android动画效果之初识Property Animation(属性动画)
前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...
- Android动画效果之Frame Animation(逐帧动画)
前言: 上一篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画),今天来总结下Android的另外一种动画Frame ...
- Android动画效果之Tween Animation(补间动画)
前言: 最近公司项目下个版本迭代里面设计了很多动画效果,在以往的项目中开发中也会经常用到动画,所以在公司下个版本迭代开始之前,抽空总结一下Android动画.今天主要总结Tween Animation ...
- 200多种Android动画效果的强悍框架
admin 发布于2015-10-23 14:33 363/68015 [精品推荐]200多种Android动画效果的强悍框架,太全了,不看这个,再有动画的问题,不理你了^@^ 功能模块和技术方案 只 ...
- Android -- 动画效果收获(1)
加载选项菜单 MenuInflater inflater = getMenuInflater(); inflater.inflater(R.menu.menu,menu); An ...
- Android动画效果translate、scale、alpha、rotate详解
动画类型 Android的animation由四种类型组成 XML中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面 ...
- Android动画效果translate、scale、alpha、rotate
overridePendingTransition只支持android 2.0以上版本,动画效果在anim目录下的xml文件中定义,在程序中用AnimationUtils.loadAnimation( ...
- Android 动画效果 及 自定义动画
1. View动画-透明动画效果2. View动画-旋转动画效果3. View动画-移动动画效果4. View动画-缩放动画效果5. View动画-动画效果混合6. View动画-动画效果侦听7. 自 ...
随机推荐
- 在web上逐行输出较大的txt文件
在某些场景下,需要在web上展示一些日志文件,这些日志文件是放在文件服务器上的一些txt. 当日志文件很大时,下载日志会导致页面长时间卡住,一直在loading状态,而且下载完日志之后分析日志并生成d ...
- EntityFramework 7 Left Join Where is error(Test record)
First of all, my English is very poor, so I may not be a very good expression, very sorry! In this b ...
- Android之探究viewGroup自定义子属性参数的获取流程
通常会疑惑,当使用不同的布局方式时,子view得布局属性就不太一样,比如当父布局是LinearLayout时,子view就能有效的使用它的一些布局属性如layout_weight.weightSum. ...
- 【iOS】NSNumberFormatter
介绍 NSNumberFormatter 应该可以满足你对数据形式的一般需求,值得了解一下. NSNumber *num1 = [NSNumber numberWithDouble:1234567.8 ...
- IOS中block和代理
从ios4开始引入block,就是代码块,结构类c语言 基本结构 返回值 (^block名称)(参数):int(^BlockName)(int):返回值为int型,参数是一个int值的叫BlockNa ...
- 用纯JS做俄罗斯方块 - 简要思路介绍(1)
大家都知道俄罗斯方块是一款大众化的游戏了,我很小的时候就玩过,今年已经25岁了,可以说俄罗斯方块确实是历史悠久,做俄罗斯方块是我上个星期开始的想法.也许是由于自己从来没有写过这种东西吧,所以有生疏.代 ...
- 【JUC】JDK1.8源码分析之CyclicBarrier(四)
一.前言 有了前面分析的基础,现在,接着分析CyclicBarrier源码,CyclicBarrier类在进行多线程编程时使用很多,比如,你希望创建一组任务,它们并行执行工作,然后在进行下一个步骤之前 ...
- 使用webstom或者idea上传代码到github或coding
鉴于github网络速度太慢,建议用coding.先介绍github上传方式,因为webstom或idea集成了github,方法简单. git是一个版本控制器,他的作用是管理代码.比如你修改了代码, ...
- Go语言异常处理defer\panic\recover
Go语言追求简洁优雅,所以,Go语言不支持传统的 try…catch…finally 这种异常,因为Go语言的设计者们认为,将异常与控制结构混在一起会很容易使得代码变得混乱.因为开发者很容易滥用异常, ...
- $\LaTeX$笔记:首字下沉
$\LaTeX$系列根目录: Latex学习笔记-序 首字下沉 \IEEEPARstart{W}{ith} ,第一个参数W会变大,占用两行,第二个参数”ith”变会大写. 如代码 \IEEEPARst ...