动画的加载方式

帧动画动态加载

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;

}

}

}

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

你可能感兴趣的:(动画的加载方式)