初学Android,图形图像之在指定点(坐标)播放动画(三十五)

news/2024/7/7 16:10:56 标签: android, 图形, constructor, exception, encoding, float

在指定地点播放动画,下面是一个爆炸过程的动画,鼠标点击处播放该动画


定义动画资源文件blast.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- 定义动画只播放一次,不循环 -->
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
	android:oneshot="true" >
	<item android:drawable="@drawable/bom_f01" android:duration="80" />
	<item android:drawable="@drawable/bom_f02" android:duration="80" />
	<item android:drawable="@drawable/bom_f03" android:duration="80" />
	<item android:drawable="@drawable/bom_f04" android:duration="80" />
	<item android:drawable="@drawable/bom_f05" android:duration="80" />
	<item android:drawable="@drawable/bom_f06" android:duration="80" />
	<item android:drawable="@drawable/bom_f07" android:duration="80" />
	<item android:drawable="@drawable/bom_f08" android:duration="80" />
	<item android:drawable="@drawable/bom_f09" android:duration="80" />
	<item android:drawable="@drawable/bom_f10" android:duration="80" />
	<item android:drawable="@drawable/bom_f11" android:duration="80" />
	<item android:drawable="@drawable/bom_f12" android:duration="80" />
	<item android:drawable="@drawable/bom_f13" android:duration="80" />
	<item android:drawable="@drawable/bom_f14" android:duration="80" />
	<item android:drawable="@drawable/bom_f15" android:duration="80" />
	<item android:drawable="@drawable/bom_f16" android:duration="80" />
	<item android:drawable="@drawable/bom_f16" android:duration="80" />
	<item android:drawable="@drawable/bom_f17" android:duration="80" />
	<item android:drawable="@drawable/bom_f18" android:duration="80" />
	<item android:drawable="@drawable/bom_f19" android:duration="80" />
	<item android:drawable="@drawable/bom_f20" android:duration="80" />
	<item android:drawable="@drawable/bom_f21" android:duration="80" />
	<item android:drawable="@drawable/bom_f22" android:duration="80" />
	<item android:drawable="@drawable/bom_f23" android:duration="80" />
	<item android:drawable="@drawable/bom_f24" android:duration="80" />
	<item android:drawable="@drawable/bom_f25" android:duration="80" />
	<item android:drawable="@drawable/bom_f26" android:duration="80" />
	<item android:drawable="@drawable/bom_f27" android:duration="80" />
</animation-list>
动画控制代码

package WangLi.Graphics.Blast;

import java.lang.reflect.Field;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.AnimationDrawable;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.FrameLayout;
import android.widget.ImageView;

public class Blast extends Activity {
    /** Called when the activity is first created. */
	private MyView myView;
	private AnimationDrawable anim;
	private MediaPlayer bomb;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //使用FramLayout布局管理器,它允许组件自己控制位置
        FrameLayout frame = new FrameLayout(this);
        setContentView(frame);
        //设置作用背景
        frame.setBackgroundResource(R.drawable.back);
        //加载音效
        bomb = MediaPlayer.create(this, R.raw.bomb);
        myView = new MyView(this);
        //设置myView用于显示blast动画
        myView.setBackgroundResource(R.anim.blast);
        //设置myView为默认隐藏
        myView.setVisibility(View.INVISIBLE);
        //获取动画对象
        anim = (AnimationDrawable)myView.getBackground();
        frame.addView(myView);
        frame.setOnTouchListener(new OnTouchListener(){
        	@Override
        	public boolean onTouch(View source,MotionEvent event)
        	{
        		//只处理按下事件(避免每次产生两个动画效果)
        		if(event.getAction() == MotionEvent.ACTION_DOWN)
        		{
        			//先停止动画播放
        			anim.stop();
        			float x = event.getX();
        			float y = event.getY();
        			//控制myView的显示位置
        			myView.setLocation((int)y - 40, (int)x - 20);
        			//setVisibility已经播放了动画,不需要再写anim.start();
        			myView.setVisibility(View.VISIBLE);
        			//播放音效
        			bomb.start();
        		}
        		return false;
        	}
        });
    }
    
    //定义一个自定义View,该自定义View用于播放"爆炸效果"
    class MyView extends ImageView
    {
		public MyView(Context context) {
			super(context);
			// TODO Auto-generated constructor stub
		}
		//定义一个方法,该方法用于控制MyView的显示位置
		public void setLocation(int top, int left)
		{
			this.setFrame(left, top, left + 40, top + 40);
		}
		//重写该方法,控制如果动画播放到最后一帧时,隐藏该View
		@Override
		protected void onDraw(Canvas canvas)
		{
			try
			{
				Field field = AnimationDrawable.class.getDeclaredField("mCurFrame");
				field.setAccessible(true);
				//获取anim动画当前帧
				int curFrame = field.getInt(anim);
				//如果已经到了最后一帧
				if(curFrame == anim.getNumberOfFrames() - 1)
				{
					//让该View隐藏
					setVisibility(View.INVISIBLE);
				}
			}
			catch(Exception e)
			{}
			super.onDraw(canvas);
		}
    }
}




http://www.niftyadmin.cn/n/1411362.html

相关文章

Git 常用的几种处理大型二进制文件的组件

Git大文件存储&#xff08;Large File Storage&#xff0c;简称LFS&#xff09;的目标是更好地把“大型二进制文件&#xff0c;比如音频文件、数据集、图像和视频”集成到Git的工作流中。众所周知&#xff0c;Git在存储二 进制文件时效率不高&#xff0c;因为&#xff1a;Git默…

初学Android,图形图像之补间动画(三十六)

补间动画&#xff0c;开发人员只需指定开始&#xff0c;动画结束"关键帧"&#xff0c;而动画变化的"中间帧"由系统计算&#xff0c;并补齐&#xff0c;所以被称为补间动画 上面的例子就是这样&#xff0c;只是定义了动作&#xff0c;变化的帧都由Android自…

react-router-dom示例讲解(六)——未匹配(404页面)

react-router-dom的官方示例中&#xff0c;未匹配的示例也是一个比较简单的示例了。其核心就是Switch组件的匹配规则——仅仅匹配第一个符合条件的Route。 实现的效果图&#xff1a; 相关示例代码&#xff1a; import React, {Component} from react; import {BrowserRo…

初学Android,图形图像之混合使用逐帧动画和补间动画(三十七)

下面例子混合使用了逐帧动画和补间动画&#xff0c;还有一个缺点&#xff0c;就是画面闪烁&#xff0c;一直没有找到解决办法上面点击ImageView,上面的人物就开始走路跟移动 定义动画文件<?xml version"1.0" encoding"utf-8"?> <animation-list…

POJ 2800 Joseph’s Problem 数论找规律

Description 求 Input 两个整数n和k(1<n,k<1e9) Output 输出 Sample Input 5 3 Sample Output 7 暴力超时&#xff0c;这样就打下表找下余数的规律。输入100,27&#xff0c;一下子就可以看出来&#xff0c;倒着的看&#xff0c;是一段一段的等差序列。 例如100 25 除数 …

初学Android,图形图像之自定义补间动画(三十八)

Android提供Animation作为补间动画抽象基类&#xff0c;而且为该抽象基类提供了 AlphaAnimation,RotateAnimation,ScaleAnimation,TranslateAnimation四个类 但是在实际项目中&#xff0c;这些很可能不够用&#xff0c;可能需要一些更复杂的动画&#xff0c;比如说立体空间的旋…

CentOS6.6系统安装

一步步教你安装CentOS 6.6系统说明&#xff1a;截止目前CentOS 6.x最新版本为CentOS 6.6&#xff0c;下面介绍CentOS 6.6的具体安装配置过程服务器相关设置如下&#xff1a;操作系统&#xff1a;CentOS 6.6 64位IP地址&#xff1a;192.168.21.129网关&#xff1a;192.168.21.2D…

react-router-dom示例讲解(七),路径递归

在react-router-dom的官方示例中&#xff0c;路径递归不是最难的&#xff0c;但是绝对是一个比较难理解的示例demo。 本示例的效果图如下&#xff1a; 相关示例核心代码&#xff1a; import React, {Component} from react; import {BrowserRouter as Router,Route,Link,S…