andriod帧动画的个人封装

      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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值