Проблема петли Android - PullRequest
       6

Проблема петли Android

0 голосов
/ 30 ноября 2010

Я новичок в Android, но не в программировании. И код ниже делает icon.png, который по умолчанию доступен в Android, перемещается по экрану или, по крайней мере, так и должно быть. Это не работает Кто-нибудь может помочь?

> package com.android.test; import
> android.app.Activity; import
> android.content.Context; import
> android.graphics.Bitmap; import
> android.graphics.BitmapFactory; import
> android.graphics.Canvas; import
> android.graphics.Color; import
> android.os.Bundle;
> 
> 
> import android.view.View; import
> android.view.Window;
> 
> public class Android extends Activity
> { int x,y=10;
> 
> @Override public void onCreate(Bundle
> savedInstanceState) {
> super.onCreate(savedInstanceState);
> requestWindowFeature(Window.FEATURE_NO_TITLE);
> setContentView(new Panel(this)); }
> 
> class Panel extends View { public
> Panel(Context context) {
> super(context); }
> 
> @Override public void onDraw(Canvas
> canvas) { Bitmap _scratch =
> BitmapFactory.decodeResource(getResources(),
> R.drawable.icon);
> canvas.drawColor(Color.BLACK); int
> n=1;  while (n==1){ try {
> Thread.sleep(30);  } catch
> (InterruptedException e) { }
> canvas.drawBitmap(_scratch, x, y,
> null);  x+=2; y+=2;
> 
> canvas.drawBitmap(_scratch, x, y,
> null);  } } } }

Ответы [ 3 ]

2 голосов
/ 30 ноября 2010

Ваш метод onDraw () никогда не возвращается.Это нужно.Ваше приложение Force Close через несколько секунд?Вам нужно будет отправить сообщение в поток пользовательского интерфейса для перерисовки через 30 миллисекунд вместо того, чтобы зацикливаться в onDraw ().Вверху головы, попробуйте это вместо этого:

class Panel extends View {
  public Panel(Context context) {
    super(context);
  }

  int x = 0;
  int y = 0;
  Bitmap _scratch = BitmapFactory.decodeResource(getResources(), R.drawable.icon);

  @Override public void onDraw(Canvas canvas) {
    canvas.drawColor(Color.BLACK);
    canvas.drawBitmap(_scratch, x, y, null);
    x+=2; y+=2;
    this.postInvalidateDelayed(30);
  }
}

Конечно, вам нужно добавить код, чтобы остановить цикл, как только значок ушел с края.

0 голосов
/ 30 ноября 2010

onDraw предназначен для рендеринга дисплея - один раз. Вероятно, это плохая идея, чтобы попытаться сделать этот цикл в onDraw.

Вместо того, чтобы использовать цикл, вы можете попробовать использовать анимацию. Выполните поиск в Google по запросу "Android animate tutorial" или подобному.

0 голосов
/ 30 ноября 2010

Я тоже любитель Android Dev, и я помню, что читал, что плохая привычка - называть Thread.Sleep () в качестве обходного пути. Но я могу ошибаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...