andriod中的帧动画 我们还是很熟悉的 但如果一个项目中都要用到帧动画 这个时候就需要进行封装
一般的做法无非是增加animationlist 在每个item里面去设置动画播放周期
这里我们用第二种也就是代码添加 这里面 我们用到了一个类叫做AnimationDrawable 一看就是和动画相关联的类
具体做法是得到 animationdrawable 然后遍历addFrame 启动动画 达到目的
见代码
MainActvity
package com.akira.anidemo;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
public class MainActivity extends Activity implements OnClickListener {
private ImageButton ib_start;
private boolean fristClick = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initFindViewById();
}
/**
* 初始化findviewbyid
*/
private void initFindViewById() {
ib_start = (ImageButton) findViewById(R.id.ib_start);
ib_start.setImageResource(R.drawable.pp1);
ib_start.setOnClickListener(this);
}
@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;
}
@Override
public void onClick(View v) {
if(fristClick){
if(v.getId()==R.id.ib_start){ FrameAnimeUtils.switchFrameAnime(true,this,ib_start);
}
fristClick = false;
}else{
FrameAnimeUtils.switchFrameAnime(false,this,ib_start);
fristClick =true;
}
}
}
这里加了一个实现开始停止切换的布尔变量
关键类
FrameAnimeUtils代码
package com.akira.anidemo;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.Drawable;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
/**
* frame动画的工具类
* @author Akira
*
*/
public class FrameAnimeUtils extends AnimationUtils {
/**
* 转换帧动画
* @param ct
* @param iv
*/
public static void switchFrameAnime(boolean running,final Context ct,final ImageView iv){
AnimationDrawable anime = new AnimationDrawable();
for(int i=1;i<=8;i++){
int id = ct.getResources().getIdentifier("pp"+i, "drawable", ct.getPackageName());
Drawable drawable = ct.getResources().getDrawable(id);
anime.addFrame(drawable, 150);
}
anime.setOneShot(false);
iv.setImageDrawable(anime);
if(running){
anime.start();
}else{
anime.stop();
}
}
}
上面说下 这个方法 第一个是停止和开始动画的一个转换 你可以看到if那里的判断
其他两个都很简单 一个上下文 一个传入想要开启动画的imageView
通过遍历开启动画
其实 这个方法还可以更抽象 我的图都是ppX命名的 我可以将图片前缀相同的部分也作为参数传入
相信不会的童鞋看过之后能有提高
整体效果就是一只奔跑的猎豹
PS:下次改传gif
521

被折叠的 条评论
为什么被折叠?



