最近在做一个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实现图片缩放、滑动,网上资源不多,目前还有些问题,仅供参考。
基于android的SurfaceView实现人物动画的一个简单示例程序。
Android SurfaceView实现动画效果
Android SurfaceView实现加载GIF动画
android之surfaceview游戏开发
2.Android游戏开发之旅二 View和SurfaceView 3.Android游戏开发之旅三 View类详解 4.Android游戏开发之旅四 Canvas和Paint实例 5.Android游戏开发之旅五 Path和Typeface 6.Android游戏开发之旅六 自定义View 7....
Android圆形相机预览窗口,圆形SurfaceView
Android SurfaceView 实现实时显示摄像头视频,详见博客:https://blog.csdn.net/qq_30297763/article/details/90241102
android学习 SurfaceView实现人物动画,代码通过测试并且附有APK编译文件,可直接在手机上运行
Android进阶篇之引导页系列之强大的SurfaceView实现动画引导页(2)
Android的SurFaceView 小游戏,天上掉下来小蘑菇,吃掉增加分数,达到一定分数后,掉落速度增加,吃到星星可以增加人物移动速度.暂时只适应480*800的分辨率,可以用模拟器运行.
Android游戏框架SurfaceView介绍 PDF TAG:Android 游戏框架 SurfaceView
Android游戏开发二 View和SurfaceView Android游戏开发三 View类详解 Android游戏开发四 Canvas和Paint实例 Android游戏开发五Path和Typeface Android游戏开发六 自定义View Android游戏开发七 自定义SurfaceView ...
Android应用源码之Android使用SurfaceView实现墨迹天气的风车效果.zip
使用VideoView播放视频简单、方便,但有些早期的开发者还是更喜欢使用MediaPlayer来播放视频,但由于MediaPlayer主要用于播放音频,因此它没有提供图像输出界面,此时就需要借助于SurfaceView来显示MediaPlayer播放...
安卓Android源码——安卓Android使用SurfaceView实现墨迹天气的风车效果.zip
Android SurfaceView 实现实时显示摄像头视频,详见博客:https://blog.csdn.net/qq_30297763/article/details/90241102
这是在上网收集的,能够截取当前Activity中surfaceView中图片。本人亲测可以通过。
Activity加载自定义的SurfaceView-> SurfaceView 构造器中启动线程A,循环改变SurfaceView的x,y坐标,当x,y坐标到某点时设渐显标志位picAlphaFlag为true -> Surface创建时即surfaceCreated中,启动线程B,循环根据...
即使用SurfaceView实现自由手绘,功能包括颜色选择、画笔粗细、撤销重做、橡皮擦