0

時間ベースの小さな質問 > アクティビティでタイマーを取得したい このコードは既に試しましたが、実行速度が速すぎて "0" になることがよくあります。スリープなしで実行するようにプログラムしたいと思います。しかし、0から60秒までカウントする

      package com.okok;


 import java.util.ArrayList;
 import java.util.List;

 import android.content.Context;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.graphics.Canvas;
 import android.graphics.Color;
 import android.os.Handler;
 import android.os.SystemClock;
 import android.view.MotionEvent;
 import android.view.SurfaceHolder;
 import android.view.SurfaceView;
 import android.view.SurfaceHolder.Callback;
 import android.widget.Chronometer;



  class GameView extends SurfaceView {
   //private Bitmap bmp;
   // Chronometer mChronometer;
   private SurfaceHolder holder;
   private GameLoopThread gameLoopThread;
   private List<Sprite> sprites = new ArrayList<Sprite>();
   private long lastClick;
private Bitmap bmpBlood;
 Handler m_handler;
 Runnable m_handlerTask ;


private List<TempSprite> temps = new ArrayList<TempSprite>();

   public GameView(Context context) {
         super(context);
         gameLoopThread = new GameLoopThread(this);
         holder = getHolder();
         holder.addCallback(new Callback() {
                @Override
                public void surfaceDestroyed(SurfaceHolder holder) {
                }
                @Override
                public void surfaceCreated(SurfaceHolder holder) {
                       createSprites();
                       gameLoopThread.setRunning(true);
                       gameLoopThread.start();
                }
                @Override
                public void surfaceChanged(SurfaceHolder holder, int format,
                              int width, int height) {
                }
         });
         bmpBlood = BitmapFactory.decodeResource(getResources(), R.drawable.blast2);
   }


   private void createSprites() {
         sprites.add(createSprite(R.drawable.greenenact));
        // sprites.add(createSprite(R.drawable.greenenact));
      //   sprites.add(createSprite(R.drawable.greenenact));

   }
   private Sprite createSprite(int resouce) {
         Bitmap bmp = BitmapFactory.decodeResource(getResources(), resouce);
         return new Sprite(this, bmp);
   }
   @Override
   protected void onDraw(Canvas canvas) {
         canvas.drawColor(Color.rgb(21, 181, 195));
         for (int i = temps.size() - 1; i >= 0; i--) {
             temps.get(i).onDraw(canvas);
       }


         final int count=0;
              m_handler = new Handler();
               m_handlerTask = new Runnable()
               {
                   @Override 
                   public void run() { 
                      // do something

                        if(count=60)
                        {
                            m_handler.removeCallbacks(m_handlerTask);
                        } 
                        count++;
                        m_handler.postDelayed(m_handlerTask, 5000);

         for (Sprite sprite : sprites) {
             sprite.onDraw(canvas);             

              }

                   }
              };
              m_handlerTask.run(); 
   }







@Override
   public boolean onTouchEvent(MotionEvent event) {
         if (System.currentTimeMillis() - lastClick > 500) {
                lastClick = System.currentTimeMillis();
             synchronized (getHolder()) {
             float x = event.getX();
                float y =event.getY();

                   for (int i = sprites.size() - 1; i >= 0; i--) {
                        Sprite sprite = sprites.get(i);
                        if (sprite.isCollition(x, y)) {
                              sprites.remove(sprite);


                            temps.add(new TempSprite(temps, this, x, y, bmpBlood));
                              break;
                        }
                    }
                }
         }
         return true;
   }

   }

これは私のプログラムです。エラーが 1 つしかありません。count を int から boolean エラーに変更できません。

アプリケーションにはアニメーションに影響するスリープ メソッドがあるため、スリープ メソッドを使用したくない

または、0 秒から 60 秒までカウントし、スリープ メソッドを使用せずに表示するプログラムを教えてください。

4

2 に答える 2

0

代わりにクロノメーターを使用してください。これが例です例2

于 2013-10-11T19:59:30.900 に答える
0

ハンドラーを使用する

 Handler m_handler;
 Runnable m_handlerTask ;
 int count=0;
      m_handler = new Handler();
       m_handlerTask = new Runnable()
       {
           @Override 
           public void run() { 
              // do something

                if(count=60)
                {
                    m_handler.removeCallbacks(m_handlerTask);
                } 
                count++:  
                m_handler.postDelayed(m_handlerTask, 1000);
                  // repeat some task every 1 second    

           }
      };
      m_handlerTask.run(); 
于 2013-10-11T20:04:57.827 に答える