【发布时间】:2011-06-28 02:56:51
【问题描述】:
我正在尝试将图像放在屏幕上并每五秒更改一次。这不在 Activity 类中。对不起,如果是一个愚蠢的问题。这对我来说是一个巨大的学习曲线。
public class Panel extends SurfaceView implements SurfaceHolder.Callback {
private Handler mHandler = new Handler();
//stuff
public void doDraw(Canvas canvas) {
int counter = 0;
canvas.drawColor(Color.BLACK);
dot1.doDraw(getResources(), canvas, counter);
mHandler.removeCallbacks(panelDraw);
mHandler.postDelayed(panelDraw, 5000);
}
private Runnable panelDraw = new Runnable() {
public void run() {
}
};
(Panel->)mPanel.doDraw(canvas) 在另一个类中调用Panel 中列出的doDraw。这是一个循环。
据我所知,第一张图片没有停止五秒钟,并且由于其他代码,猫图片在屏幕上闪烁。我可以在 run() 中不放任何东西吗?我想把 dot1.doDraw(getResources(), canvas, counter) 放在那里,但我不能/不认为我可以提供 void run() 参数或 Runnable panelDraw 资源、画布、计数器参数。
感谢任何帮助。让我知道是否需要提供更多代码。
关于我的游戏的更多信息:小猫照片应该出现在屏幕上的随机位置。如果在规定的时间内没有点击当前的小猫图像,则游戏结束。这些图片最终持续
我听说如果你需要做很多绘图,你最好使用 SurfaceView,就像我非常密切关注的教程中一样:http://www.droidnova.com/2d-tutorial-series-part-v,848.html我的 Activity 类 (Scene1) 有 setContentView(new Panel(this)) ,所以我不知道如何把东西放在 Activity 类中,而这一切都放在 Panel 类中。如果 Activity 线程并没有真正做太多事情并将其全部交给 Panel,我应该将 ImageView 代码放在哪里?另外,如果我有一个处理运行的 ViewThread(公共类 ViewThread 扩展线程):
public void run() {
Canvas canvas = null;
while (mRun1) {
do {
canvas = mHolder.lockCanvas();
if (canvas != null) {
mPanel.doDraw(canvas);
mRun1 = true;
mRun1 = mPanel.get_run();
mHolder.unlockCanvasAndPost(canvas);
}
} while (mRun1 == true);
点类有类似的东西:
public void firstRing(Resources res, Canvas canvas, int counter){
Random rand = new Random();
switch(counter) {
case 0: mBitmap = BitmapFactory.decodeResource(res,
R.drawable.cat1_m);
break;
case 1: mBitmap = BitmapFactory.decodeResource(res,
R.drawable.cat2_m);
break;
case 2: mBitmap = BitmapFactory.decodeResource(res,
R.drawable.cat2_m);
break;
case 3: mBitmap = BitmapFactory.decodeResource(res,
R.drawable.cat2_m);
break;
case 4: mBitmap = BitmapFactory.decodeResource(res,
R.drawable.cat2_m);
break;
case 5: mBitmap = BitmapFactory.decodeResource(res,
R.drawable.cat1_m);
break;
}
mX = rand.nextInt((int)(Panel.mWidth - mBitmap.getWidth()));
mY = rand.nextInt((int)(Panel.mHeight - mBitmap.getHeight()));
canvas.drawBitmap(mBitmap, mX, mY, null);
和
public void doDraw(Resources res, Canvas canvas, int counter) {
firstRing(res, canvas, counter);
}
谢谢你的信息,巴里,虽然我有点困惑。我是尝试 ImageView 还是坚持使用 Handler(),虽然我不知道如何使用它并且它现在不工作?我需要 public void run() 中的东西吗?
【问题讨论】:
-
我删除了我原来的答案,因为正如 rochdev 指出的那样,您永远不应该在非 UI 线程(基本上是您自己创建的任何线程)中使用视图。不过,简短的回答是使用 ImageView 和处理程序。我将尝试在下面的新答案中进行解释。