带点击的android按钮动画
我试着制作飞行的气球(上下,无限),点击其中一个,它就会改变方向。我尝试使用动画,但它不支持在当前时间单击当前位置的视图。我知道,至少有两种方法:带点击的android按钮动画,android,animation,canvas,Android,Animation,Canvas,我试着制作飞行的气球(上下,无限),点击其中一个,它就会改变方向。我尝试使用动画,但它不支持在当前时间单击当前位置的视图。我知道,至少有两种方法: 使用OpenGL 并使用画布 我不想使用OpenGL制作简单的动画。我不知道如何使用Canvas(被阅读、谷歌文档和一些谷歌搜索链接)来实现这一点。 我不需要代码,我只需要它的方法和算法。好的,这是我为我的一个项目设置的,它将完全按照您的需要工作 您需要创建4个主要方面: -活动(扩展活动) -SurfaceView(扩展SurfaceView实
- 使用OpenGL
- 并使用画布
我不需要代码,我只需要它的方法和算法。好的,这是我为我的一个项目设置的,它将完全按照您的需要工作 您需要创建4个主要方面:
-活动(扩展活动)
-SurfaceView(扩展SurfaceView实现SurfaceHolder.Callback)
-线程(扩展线程)
-交互对象(扩展可绘制) 该活动将启动并生成创建线程的SurfaceView。视图或线程可以包含您绘制/与之交互的对象,这取决于您此时希望如何存储数据,但如果您提出类之间耦合最少的设计,则最简单 一旦启动,线程将持续运行直到停止(将
isRunning
设置为false):
在这个类中,您可以看到update()
方法,它在线程的每次迭代中执行一系列操作
您最感兴趣的方法是handleInput
、updateUI
和updatePhysics
方法
在handleInput
中,您将回调SurfaceView以获取处理信息所需的数据。我的handleInput
相当简单,因为它只从SurfaceView类的onTouchEvent
中获取MotionEvent
(这在使用SurfaceHolder.OnCallBack接口时实现)
updateUI
方法调用SurfaceView的update
,在那里它用每个对象或气球重新绘制画布
public void update(List<Actor> actors) {
Canvas canvas = null;
try {
canvas = surface.lockCanvas();
synchronized (surface) {
//Blank the Canvas
for (int i = 0; i < actors.size(); i++) {
actors.get(i).draw(canvas);
}
}
} catch (NullPointerException e) {
e.printStackTrace();
} finally {
if (canvas != null) {
surface.unlockCanvasAndPost(canvas);
}
}
}
公共作废更新(列出参与者){
Canvas=null;
试一试{
canvas=surface.lockCanvas();
同步(表面){
//填空画布
对于(inti=0;i
这里我们可以看到,它调用了draw
方法,将画布对象传递给每个可交互对象。我在上面的代码中称我的“演员”。如何选择实现draw
取决于您,但听起来您将使用许多canvas.drawBitmap()
函数
回到线程的updatePhysics
方法,您希望在对象被绘制到屏幕之前或之后使用它来更新对象。对于你来说,你需要让他们改变他们在屏幕上的X和/或Y位置,或者在handleInput
确定你击中气球后改变其移动方向
很难在回答中解释清楚这一点。如果你真的想要,我可以尝试在这个周末把一些更具信息性的东西放在一起,并在外部发布给你(我可以提供我的UML类图以及其他信息,比如图片示例、结构和数据流)
请让我知道我是否可以进一步帮助您!请注意,这并不是我全部的工作。我使用了很多关于基本Android游戏结构的在线教程,但目前没有提供参考的链接。我现在没有时间写完整的解释,但谷歌提供了Android游戏教程。您需要创建一个线程,该线程在气球对象上执行更新命令,然后让它们调用画布上的绘制命令。这些教程有很多,它们应该可以帮助您。我可以稍后发布我的项目中的代码,这些代码使用了您以后需要的大量工作。好的。我非常感谢您提供一些代码
public void update(List<Actor> actors) {
Canvas canvas = null;
try {
canvas = surface.lockCanvas();
synchronized (surface) {
//Blank the Canvas
for (int i = 0; i < actors.size(); i++) {
actors.get(i).draw(canvas);
}
}
} catch (NullPointerException e) {
e.printStackTrace();
} finally {
if (canvas != null) {
surface.unlockCanvasAndPost(canvas);
}
}
}