我一直在修改钻研Android SDK的想法,因为我刚刚收到了我的Droid X,并且最近才采取行动。我在Eclipse中安装了ADT插件,下载并安装了Android SDK(Rev。11),并尝试了一些东西。我想尝试2d图形,因为它们与我在工作中花费的时间(嵌入式系统开发)有很大不同。
我尝试按照教程here进行操作,但由于实现了两个接口的错误而无法构建。我正在尝试在64位Windows 7机器上构建2.3.3。我将包含下面的代码,重要的警告我不是一个典型的Java程序员,显而易见的事情很容易让我逃脱。
Drawable Panel.java
package com.android.tutorial;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public abstract class DrawablePanel
extends SurfaceView
implements SurfaceHolder.Callback, ISurface {
private AnimationThread thread;
public DrawablePanel(Context context) {
super(context);
getHolder().addCallback(this);
this.thread = new AnimationThread(getHolder(), this);
}
@Override
public void onDraw(Canvas canvas) {
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
thread.setRunning(true);
thread.start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
boolean retry = true;
thread.setRunning(false);
while (retry) {
try {
thread.join();
retry = false;
} catch (InterruptedException e) {
// we will try it again and again...
}
}
}
}
ISurface.java
package com.android.tutorial;
import android.graphics.Canvas;
public interface ISurface {
void onInitialize();
void onDraw(Canvas canvas);
void onUpdate(long gameTime);
}
AndroidTutorial.java
package com.android.tutorial;
import android.app.Activity;
import android.content.Context;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.os.Bundle;
public class AndroidTutorial extends Activity {
AnimatedSprite animation = new AnimatedSprite();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new AndroidTutorialPanel(this));
}
class AndroidTutorialPanel extends DrawablePanel {
public AndroidTutorialPanel(Context context) {
super(context);
}
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
AndroidTutorial.this.animation.draw(canvas);
}
@Override
public void onInitialize() {
AndroidTutorial.this.animation.Initialize(
BitmapFactory.decodeResource(
getResources(),
R.drawable.explosion),
32, 32, 14, 7);
}
@Override
public void onUpdate(long gameTime) {
AndroidTutorial.this.animation.Update(gameTime);
}
}
}
我在DrawablePanel.java
中在surfaceChanged(),surfaceCreated()和surfaceDestroyed()的定义中收到以下错误:
The method [name of function mentioned above](SurfaceHolder) of type DrawablePanel must override a superclass method.
onInitialize
中的onUpdate
和AndroidTutorial.java
也是如此。我迷失了,因为我可以在工作中复制/粘贴相同的东西(SDK的第10版),没有错误。有什么想法吗?
答案 0 :(得分:3)
我意识到这有点晚了,希望你已经弄明白了,但是你正在实施SurfaceHolder.Callback而不是扩展它。
从函数中删除@Override它应该可以工作。
答案 1 :(得分:3)
这可能有点旧了,你可能已经弄明白了,但我遇到了同样的问题(我跟你做了同样的例子)。事实证明,这些编译错误是由于您使用的Java编译器级别,您必须将其设置为1.6 (因此它也会使@Override注释对接口实现的方法也有效),如果你使用1.5级,也可以删除@Override注释。