最近在做一个Android小游戏,使用SurfaceView实现,在为游戏加过关动画的时候遇到了麻烦,记录于此,供大家参考。在SurfaceView中,加动画有两种方式,一种是在Canvas上画出图形,然后对图形的位置、大小等参数进行改变来实现动画效果;另一种是使用Animation类。
对于在SurfaeView上实现第二种方式的动画,有很多值得注意的地方,当然网上有一种将View和SurfaceView同时显示,利用View去实现动画的方法
,虽然可以,但感觉太麻烦。开始入题:
首先,提醒大家,在SurfaceView中,只能对整个Canvas播放动画,而不能对某个画出来的图形播放动画;
其次,要想看到动画效果,必须先为SurfaceView设置背景,setBackgroundXXX(),有三个可用方法,可任意选用,视情况而定
最后,在播放玩动画后,你会发现原来画的东西看不到了,只能看到背景,这时候要去掉这个背景,调用SurfaceView的setBackgroundResource(0)方法,参数0表示去掉背景。
来一段实例
private MessageHandler messageHandler;
public GameView(Context context) {
......
Looper looper = Looper.getMainLooper();
messageHandler = new MessageHandler(looper);
......
}
//播放过关动画
private void playAnimation() {
//收缩
ScaleAnimation mScaleAnimation = new ScaleAnimation(1.0f, 0f,
1.0f, 0f, Animation.RELATIVE_TO_SELF,
0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
mScaleAnimation.setDuration(3000);
//旋转
RotateAnimation mRotateAnimation = new RotateAnimation(0.0f, 1000.0f,
Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
mRotateAnimation.setDuration(3000);
//更新背景必须在主线程中调用,所以使用了MessageHandler
GameView.this.setBackgroundResource(ResourceUtil.nextLevelImage);
AnimationSet animationSet = new AnimationSet(true);
animationSet.addAnimation(mRotateAnimation);
animationSet.addAnimation(mScaleAnimation);
GameView.this.setAnimation(animationSet);
animationSet.startNow();
//这里使用Timer在动画播放后将背景去掉,注意控制时间
Timer tempTimer = new Timer();
tempTimer.schedule(new TimerTask() {
@Override
public void run() {
GameView.this.setBackgroundResource(0);
}
}, 3000);
}
class MessageHandler extends Handler {
public MessageHandler (Looper looper) {
super(looper);
}
@Override
public void handleMessage(Message msg) {
if(msg.what == Play_Animation_Message)
playAnimation();
}
}
在要播放动画的地方加入以下代码
Message msg = new Message();
msg.what = Play_Animation_Message; //构造Message对象
messageHandler.sendMessage(msg); //发送Message,将由MessageHandler来处理
以下是效果截图:
大家有什么更好的方法,欢迎分享交流!
分享到:
相关推荐
在Android开发中,SurfaceView是一种特殊的视图,它允许开发者创建高性能的图形界面,尤其适合处理视频播放或游戏等需要连续刷新的场景。本话题主要探讨如何利用SurfaceView实现图片的缩放和滑动功能。 首先,理解...
在Android开发中,SurfaceView是一种特殊的视图,它允许开发者在单独的线程中进行高性能的图形绘制,常用于游戏或者视频播放等需要连续更新显示内容的场景。本篇文章将详细探讨如何利用SurfaceView实现动画效果,...
在Android开发中,SurfaceView是一种特殊的视图组件,它提供了在UI线程之外进行渲染的能力,使得复杂的动画或视频播放成为可能。在这个“android SurfaceView实现人物动画”的示例程序中,我们将深入探讨如何利用...
本篇文章将深入探讨如何使用`SurfaceView`来实现加载GIF动画,这是一个常见的需求,特别是在游戏开发或者需要实时渲染场景的应用中。 首先,我们要理解`SurfaceView`的基本概念。`SurfaceView`是Android系统提供的...
在Android平台上进行游戏开发,SurfaceView是一个至关重要的组件,它为高效、低延迟的图形绘制提供了可能,尤其适合用于创建动态、高性能的游戏画面。本文将深入探讨如何利用SurfaceView进行游戏开发,以及与之相关...
在Android平台上,开发一款基于SurfaceView的小游戏是一个有趣且具有挑战性的任务。SurfaceView是Android系统提供的一种特殊视图,它允许开发者创建高性能、低延迟的图形界面,非常适合用于游戏和视频播放等需要连续...
在Android开发中,有时我们可能需要创建一个独特的用户体验,比如设计一个圆形的相机预览窗口。这个场景就涉及到了Android的SurfaceView以及如何定制它的显示效果。本文将深入探讨如何实现一个圆形的相机预览窗口。 ...
2.Android游戏开发之旅二 View和SurfaceView 3.Android游戏开发之旅三 View类详解 4.Android游戏开发之旅四 Canvas和Paint实例 5.Android游戏开发之旅五 Path和Typeface 6.Android游戏开发之旅六 自定义View 7....
在Android开发中,实时显示摄像头视频是一个常见的需求,如创建相机应用、视频聊天或游戏等。`SurfaceView`是Android提供的一种用于高效显示多媒体数据的视图组件,尤其适合处理像视频流这样的实时数据。本篇文章将...
在Android开发中,SurfaceView是一种特殊的视图,它允许开发者在应用程序中创建高性能的图形界面,特别是用于实现动画效果,如游戏或者视频播放等。SurfaceView拥有自己的绘图表面,与主线程分离,因此在处理复杂的...
在Android应用开发中,我们经常会遇到需要创建流畅的动画效果,但有时使用默认的动画机制(如`ViewPropertyAnimator`、`ObjectAnimator`等)可能会出现性能问题,尤其是在处理大量图形变化或者游戏场景时。...
总之,通过SurfaceView实现实时显示摄像头视频是Android开发中的一个基础任务,涉及到对Android系统相机API的理解和使用,以及对SurfaceView生命周期的掌握。随着技术的发展,开发者可以选择更高级的API,如Camera2...
在这个"Android进阶篇之引导页系列之强大的SurfaceView实现动画引导页(2)"中,我们将深入探讨如何利用SurfaceView来创建动态且引人入胜的引导页动画。 SurfaceView是Android系统提供的一种特殊视图,它允许开发者...
在Android开发中,`SurfaceView`是一个非常重要的视图组件,尤其在处理视频播放、游戏渲染等高性能图形操作时,它的优势在于拥有独立于主线程的渲染机制,能避免阻塞UI更新。然而,由于其特殊的性质,直接通过常规...
在Android应用开发中,SurfaceView是一个非常重要的组件,它提供了在主线程之外进行绘图的能力,使得复杂的动画和游戏能够流畅运行。本压缩包“Android应用源码之Android使用SurfaceView实现墨迹天气的风车效果.zip...
在Android平台上开发游戏时,SurfaceView是一个至关重要的组件,它为高效、低延迟的图形渲染提供了可能。SurfaceView是Android系统提供的一种特殊视图,它有自己的独立绘制表面,与主线程分离,使得游戏或者视频这类...
在Android平台上开发游戏时,SurfaceView是一个非常重要的组件。它提供了低延迟的显示功能,并且支持双缓冲机制,这对于实时渲染图像非常关键。相比于传统的View组件,SurfaceView在性能上有着显著的优势。 #### 二...
在Android开发中,`SurfaceView`是一个非常重要的视图组件,尤其适用于处理高性能图形和视频渲染。本项目通过`SurfaceView`实现图片的缩放、移动以及添加标记功能,这在许多应用场景中都非常实用,比如地图应用或者...
在Android游戏开发中,将一个`Button`控件悬浮于`SurfaceView`之上是一项常见的需求。这通常是为了解决在游戏界面中添加交互元素,如暂停、设置或返回按钮,以便用户可以随时进行操作。本篇文章将深入探讨如何实现这...
这个名为"基于android实现SurfaceView播放视频代码.rar"的压缩包提供了实现这一功能的源码参考,对于初学者和经验丰富的开发者来说都是一份宝贵的资源。下面,我们将深入探讨如何利用Android的SurfaceView组件来播放...