2016-04-18 3 views
-1

何らかの理由で私はこれを正しく行うことができません。私がしたいのは、3秒ごとに3枚の画像が表示されますが、なんらかの理由で1枚の画像がランダムに表示され、その後別の画像が突然表示されて消えます。全般的に、3秒ごとにイメージを生成したいが、何らかの理由でそれを動作させることはできない。ビューが作成されたとき3秒ごとにランダムな画像を表示する - Android用の

public class VGameView extends View { 
private Bitmap parrot; 
private Bitmap moneyChest; 
private Bitmap bomb; 

Random randy; 
int savedTime = 0; 
long lastTime; 
int rndImg; 

private String score = "Score: "; 
private int scoreCounter = 0; 
private Paint scorePaint = new Paint(); 

public VGameView(Context context) { 
    super(context); 

    parrot = BitmapFactory.decodeResource(getResources(), R.drawable.parrot); 

    moneyChest = BitmapFactory.decodeResource(getResources(), R.drawable.moneychest); 

    bomb = BitmapFactory.decodeResource(getResources(), R.drawable.bomb); 

    scorePaint.setColor(Color.BLACK); 
    scorePaint.setTextSize(50); 
} 

public boolean onTouchEvent(MotionEvent event) { 
    int eventAction = event.getAction(); 

    int x = (int) event.getX(); 
    int y = (int) event.getY(); 

    switch (eventAction) { 
     case MotionEvent.ACTION_DOWN: 
      break; 
    } 
    invalidate(); 
    return true; 
} 

@Override 
protected void onDraw(Canvas canvas) { 
    String.valueOf(scoreCounter); 
    canvas.drawText(score + scoreCounter, 10, 100, scorePaint); 

    long now = System.currentTimeMillis(); 
    savedTime += now - lastTime; 
    lastTime = now; 

    if (savedTime > 3000) { 
     savedTime = 0; 
     Random randy = new Random(); 
     rndImg = (int) (3 * Math.random()) + 1; 
     if (rndImg == 1) { 
      canvas.drawBitmap(parrot, 200, 500, null); 
     } 

     if (rndImg == 2) { 
      canvas.drawBitmap(moneyChest, 600, 200, null); 
     } 

     if (rndImg == 3) { 
      canvas.drawBitmap(bomb, 30, 30, null); 
     } 
    } 
} 

答えて

0

がpostdelayed

private Handler mHandler; 

Runnable imageChecker = new Runnable() { 
@Override 
public void run() { 
     try { 
      //update your image here 
     } finally { 
      mHandler.postDelayed(imageChecker, 3000); 
     } 
} 
}; 

のonCreate

mHandler = new Handler(); 
imageChecker.run(); 
+0

...教えてくださいXMLと単なるGameViewを使用せず、私はonCreateを使用しません。私はそれを実装する方法をさらに詳しく見ていきますが、助けてくれてありがとう!とても有難い! – AlanW

1

onDraw()とのハンドラを実装一度呼び出され、その後、それは次のようになります。以下は私のVGameViewためのコードですビューをリセットする必要がある場合にのみ呼び出されます。これは、invalidate()メソッドを呼び出すと発生します。

ですから、ビューを作成するアクティビティにスレッドまたはハンドラを作成し、3秒ごとにビューをリセットすることをお勧めします。 VGameView内部

:アクティビティ内

@Override 
protected void onDraw(Canvas canvas) { 
    String.valueOf(scoreCounter); 
    canvas.drawText(score + scoreCounter, 10, 100, scorePaint); 

     rndImg = (int) (3 * Math.random()) + 1; 
     if (rndImg == 1) { 
      canvas.drawBitmap(parrot, 200, 500, null); 
     } 

     if (rndImg == 2) { 
      canvas.drawBitmap(moneyChest, 600, 200, null); 
     } 

     if (rndImg == 3) { 
      canvas.drawBitmap(bomb, 30, 30, null); 
     } 
    } 

public void reset(){ 
    invalidate(); 
} 

:それが動作するかどうか

Handler mHandler = new Handler(); 
Runnable changeImage = new Runnable() { 
@Override 
public void run() { 
     mview.reset(); 
     mHandler.postDelayed(changeImage, 3000); 
    } 
}; 

mHandler.postDelayed(changeImage, 3000); 

はそれだけでJavaのクラスのように、この作業を取得する方法について全くわからない

関連する問題