动画的加载方式

帧动画动态加载

private ImageView show_iv;

private AnimationDrawable drawable;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

show_iv = (ImageView) findViewById(R.id.show_iv);

// 资源文件加载的方式  一定要设置该资源为 ImageView的backGround   不能是  src

// drawable = (AnimationDrawable) show_iv.getBackground();

// // true 只播放一次 否则 重复播放 (默认)

// drawable.setOneShot(false);

drawable = new AnimationDrawable();

drawable.addFrame(getResources().getDrawable(R.drawable.girl_1), 200);

drawable.addFrame(getResources().getDrawable(R.drawable.girl_2), 200);

drawable.addFrame(getResources().getDrawable(R.drawable.girl_3), 200);

drawable.addFrame(getResources().getDrawable(R.drawable.girl_4), 200);

drawable.addFrame(getResources().getDrawable(R.drawable.girl_5), 200);

drawable.addFrame(getResources().getDrawable(R.drawable.girl_6), 200);

drawable.addFrame(getResources().getDrawable(R.drawable.girl_7), 200);

drawable.addFrame(getResources().getDrawable(R.drawable.girl_8), 200);

drawable.addFrame(getResources().getDrawable(R.drawable.girl_9), 200);

drawable.addFrame(getResources().getDrawable(R.drawable.girl_10), 200);

drawable.addFrame(getResources().getDrawable(R.drawable.girl_11), 200);

show_iv.setImageDrawable(drawable);

drawable.setOneShot(true);

}

public void onClick(View view) {

if (drawable.isRunning()) {

drawable.stop();

} else {

drawable.start();

}

}

}

补间动画

/**

* 补间动画 TwennAnimation 补充开始与结束之间的动作 支持 位移, 旋转 ,缩放 透明度的改变 这四种动画 并且 只支持 View 来执行

* 动画的资源可以使用xml资源文件的方式 定义 也可以使用Java代码的方式 定义

*

*

* xml资源放在 res文件夹下的 anim 文件夹中

* @author alice

*

*/

public class MainActivity extends Activity {

private ImageView show_iv;

// 每次加载 res 资源文件都是耗费资源的一个过程 因此 先将资源加载出来 每次启动动画的时候 都直接执行动画即可 不需要再次去加载资源

private Animation translate;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

show_iv = (ImageView) findViewById(R.id.show_iv);

show_iv.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

Toast.makeText(MainActivity.this, "这里是View 存在的地方", Toast.LENGTH_SHORT).show();

}

});

}

public void onClick(View view) {

switch (view.getId()) {

case R.id.translate_bt:

// 位移动画

Animation tAnimation = new TranslateAnimation(0, 100, 0, 300);

tAnimation.setDuration(3000);

tAnimation.setFillAfter(true);

//插值器  减速插值器

tAnimation.setInterpolator(new DecelerateInterpolator());

show_iv.startAnimation(tAnimation);

break;

case R.id.alpha_bt:

// 透明度

Animation alpha = new AlphaAnimation(0.0f, 1.0f);

alpha.setDuration(3000);

alpha.setFillAfter(true);

show_iv.startAnimation(alpha);

break;

case R.id.rotate_bt:

// 旋转

Animation rotate = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,

0.5f);

rotate.setDuration(3000);

rotate.setFillAfter(true);

show_iv.startAnimation(rotate);

break;

case R.id.scale_bt:

// 缩放

Animation scale = new ScaleAnimation(1, 0.5f, 1, 1, 0, 0.5f);

scale.setDuration(3000);

scale.setFillAfter(true);

show_iv.startAnimation(scale);

break;

case R.id.set_bt:

// 集合

setAnimationList();

break;

default:

break;

}

}

private void setAnimationList() {

// false 使用集合动画 自己的 插值器

// true 则使用 set 默认的 插值器

AnimationSet set = new AnimationSet(false);

//位移动画

Animation tAnimation = new TranslateAnimation(0, 100, 0, 200);

tAnimation.setDuration(3000);

//透明度动画

Animation alpha = new AlphaAnimation(0.0f, 1.0f);

alpha.setDuration(3000);

//添加动画

set.addAnimation(tAnimation);

set.addAnimation(alpha);

//开始动画

show_iv.startAnimation(set);

}

属性动画

/**

* 属性动画

位移 translationX translationY

* 旋转 rotation rotationX rotationY

* 缩放 scaleX scaleY

* 透明度 alpha

*

* ObjectAnimator

* 构造方法:

* ObjectAnimator.OfFloat()

* 第一个参数:执行该动画的对象

* 第二个参数:动画的属性名称

* 第三个参数:可变参数,执行的动画的值

*

* 集合

* AnimatorSet

* 逻辑不要出错  不用使用重复的对象 并且  每一个关系都是相对于 第一个动画的

* set.Play().with().before().after()

*

*用集合将动画记录下来 之后  有序或同步执行

* set.playTogether(List)

* set.playSequentially(List)

*

*动画监听

* animator.setListener(){

* start

* end

* repeat

* cancle

* }

*

*动画延迟

* startDelayed

*

*

* 加载动画中的xml资源:

* 1.在res 文件夹下创建文件夹名字为   animator的文件夹

* 在 该文件夹下添加资源

*

* AnimatorInflate.loadAnimator(Context,resId);

* animator.setTartget(Object)

*

* ValueAnimator  OnjectAnimator的 父类

* 也可以实现动画 只是比较麻烦

*

*

* @author alice

*

*/

public class MainActivity extends Activity {

private ImageView show_iv;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

show_iv = (ImageView) findViewById(R.id.show_iv);

show_iv.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

Toast.makeText(MainActivity.this, "我就在这里!", Toast.LENGTH_SHORT).show();

}

});

}

@TargetApi(Build.VERSION_CODES.HONEYCOMB) @SuppressLint("NewApi")

public void onClick(View view) {

switch (view.getId()) {

case R.id.translate_bt:

// 位移动画

/*

* 第一个参数: 执行该动画的 对象 第二个参数: 动画的属性名称 第三个参数: 可变参数 执行动画的 值

*

*/

ObjectAnimator translateAnimator = ObjectAnimator.ofFloat(show_iv, "translationX", 0, 200, 100, 50);

translateAnimator.setDuration(3000);

translateAnimator.start();

break;

case R.id.rotate_bt:

// 旋转

ObjectAnimator rotationAnimator = ObjectAnimator.ofFloat(show_iv, "rotationY", 0, 360, 720);

rotationAnimator.setDuration(3 * 1000);

rotationAnimator.start();

break;

case R.id.scale_bt:

//缩放

ObjectAnimator scaleAnimator = ObjectAnimator.ofFloat(show_iv, "scaleX", 1, 4, 2);

scaleAnimator.setDuration(3000);

scaleAnimator.setRepeatCount(3);

// 动画延时

scaleAnimator.setStartDelay(3000);

scaleAnimator.start();

// 动画的监听

scaleAnimator.addListener(new AnimatorListener() {

@Override

public void onAnimationStart(Animator animation) {

// 动画开始的时候

Log.d("TAG", "onAnimationStart");

}

@Override

public void onAnimationRepeat(Animator animation) {

// 动画重复的时候

Log.d("TAG", "onAnimationRepeat");

}

@Override

public void onAnimationEnd(Animator animation) {

// 动画 结束的时候

Log.d("TAG", "onAnimationEnd");

}

@Override

public void onAnimationCancel(Animator animation) {

// 动画取消的时候

}

});

break;

case R.id.alpha_bt:

//透明

ObjectAnimator alphaAnimator = ObjectAnimator.ofFloat(show_iv, "alpha", 0, 1);

alphaAnimator.setDuration(3000);

alphaAnimator.start();

break;

case R.id.set_bt:

// 集合

AnimatorSet set = new AnimatorSet();

ObjectAnimator translateX = ObjectAnimator.ofFloat(show_iv, "translationX", 0, 200, 200, 0, 0);

translateX.setDuration(3000);

ObjectAnimator translateY = ObjectAnimator.ofFloat(show_iv, "translationY", 0, 0, 200, 200, 0);

translateY.setDuration(3000);

// 第二种表达方式

List list = new ArrayList();

list.add(translateY);

list.add(translateX);

// 依次执行

// set.playSequentially(list);

// 同步执行

// set.playTogether(list);

// 后面的 逻辑思维一定要正确 并且 同一个动画只能参与一次 后面的所有添加的 逻辑 都是相对于 第一个 play()中的动画

set.play(translateX).with(translateY).after(translateY);

set.start();

break;

case R.id.value_bt:

// ValueAnimator 是 ObjectAnimator的 父类

// 实现起来比较麻烦

ValueAnimator animator = ValueAnimator.ofFloat(0, 200);

animator.setDuration(3000);

animator.addUpdateListener(new AnimatorUpdateListener() {

@Override

public void onAnimationUpdate(ValueAnimator animation) {

float value = (Float) animation.getAnimatedValue();

show_iv.setTranslationX(value);

}

});

animator.start();

break;

default:

break;

}

}

}

这是我的动画源码,是动态加载,

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

推荐阅读更多精彩内容

  • 补间动画(Tween Animation) 补间动画有以下四种 Alpha透明度动画 Scale尺寸缩放动画 Tr...
    _执_念__阅读 447评论 0 1
  • 曾经我们一度的使用动画,不管是利用xml还是代码实现,但是你深入思考过吗(肯定有大牛早已知晓一切,勿喷,人都要有爱...
    laer_L阅读 955评论 0 9
  • 前言 在学习了Android的动画之后,简单总结了一下,看完这篇文章就可以自己动手写一个简单的动画了 正文 An...
    墨月城汐阅读 1,394评论 0 5
  • 回首翻看前岁事,儿时碎片尽毫梢。 时间存储新除旧,难舍之疼不可消。 留下辛酸常忆忆,记得别忘搭谁桥。 无聊乐事随尘...
    徐一村阅读 290评论 0 3
  • 网上报了微信课,跟七七学画瑜伽小人儿,今天只报站立体式:正面、侧面、前屈。先一个田字形画头部,延中线延伸直线,与头...
    yogaying阅读 754评论 0 0