自定义简单的逐帧动画控件

android的动画类需要借助VIEW,在动态自定义的VIEW中使用,有时使用比较麻烦。

package com.example.scr;

import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.view.View;

public class ArrowAnimationView extends View{
	Context mContext;
	private int scr_w = 0, scr_h = 0;
	private ArrayList<Bitmap> ani = new ArrayList<Bitmap>(5); 
	private int g_anim_index = 0;
	private boolean isStart = true;
	private boolean isShow = true;
	private Timer timer = new Timer();
	
	public ArrowAnimationView(Context context) {
		super(context);
		mContext = context;
		int[] imgIds = {R.drawable.ani01, R.drawable.ani02, R.drawable.ani03,
				R.drawable.ani04, R.drawable.ani05 };
		for (int i = 0; i < imgIds.length; i++) {
			Bitmap bm = BitmapFactory.decodeResource(mContext.getResources(),
					imgIds[i]);
			ani.add(bm);
		}
		
		timer.scheduleAtFixedRate(new MyTask(), 100, 1000);
	}
	public ArrowAnimationView(Context context, int w, int h) {
		super(context);
		scr_w = w;
		scr_h = h;
		mContext = context;
		int[] imgIds = {R.drawable.ani01, R.drawable.ani02, R.drawable.ani03,
				R.drawable.ani04, R.drawable.ani05 };
		for (int i = 0; i < imgIds.length; i++) {
			Bitmap bm = BitmapFactory.decodeResource(mContext.getResources(),
					imgIds[i]);
			ani.add(bm);
		}
		
		timer.scheduleAtFixedRate(new MyTask(), 1, 200);
	}
	@Override
	public void layout(int l, int t, int r, int b) {
		// TODO Auto-generated method stub
		super.layout(l, t, r, b);
	}
	@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		// TODO Auto-generated method stub
		super.onMeasure(widthMeasureSpec, heightMeasureSpec);

	}
	public void drawArrowAnim(Canvas canvas)
	{
		int img_w = ani.get(0).getWidth();
		int img_h = ani.get(0).getHeight();
		int left = (scr_w / 2) - (img_w / 2);
		int top = scr_h - img_h - 120;
		
		canvas.drawBitmap(ani.get(g_anim_index), left, top, null);
	}

	private class MyTask extends TimerTask {
		@Override
		public void run() {
			if (isStart) {
				g_anim_index++;
				if (g_anim_index > ani.size()-1) {
					g_anim_index = 0;
				}
			}
		}
	}
	void startAnim()
	{
		isStart = true;
	}
	void stopAnim()
	{
		isStart = false;
	}
	void hideAnim()
	{
		isShow = true;
	}
	void showAnim()
	{
		isShow = false;
	}
	@Override
	protected void onDraw(Canvas canvas) {
		// TODO Auto-generated method stub
		super.onDraw(canvas);
		if (isShow)
		{
		   drawArrowAnim(canvas);
		}
        invalidate();
	}
	public void onViewDestroy() {
		// TODO Auto-generated method stub
		if (timer != null) {
			timer.cancel();
		}
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值