【问题标题】:Displaying random image every 3 seconds - Android Studio每 3 秒显示一次随机图像 - Android Studio
【发布时间】:2016-04-18 14:41:13
【问题描述】:

由于某种原因,我似乎无法正确理解这一点。我想要做的是每 3 秒出现三个图像中的任何一个,但由于某种原因,它给了我一个随机图像,然后另一个突然出现并消失。所以总的来说,我希望它每 3 秒生成一张图像,但由于某种原因无法让它工作。下面是我的 VGameView 的代码:

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);
        }
    }
}

【问题讨论】:

    标签: android android-studio random timer


    【解决方案1】:

    onDraw() 将在创建视图时调用一次,之后仅在需要重置视图时调用。当您调用 invalidate() 方法时会发生这种情况。

    所以,我建议您在创建视图的 Activity 中创建一个线程或处理程序,然后每 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);
    

    告诉我这是否有效..

    【讨论】:

      猜你喜欢
      • 2020-05-31
      • 1970-01-01
      • 1970-01-01
      • 2019-09-28
      • 1970-01-01
      • 2014-05-07
      • 2014-09-15
      • 1970-01-01
      • 2014-10-12
      相关资源
      最近更新 更多