-1

60秒の簡単なタイマーを作りたいです。ボタンをタップするとタイマーがスタートします。そして、time = 0の場合、テキストを文字列に設定します。アクティビティ内のAndroidでそれを行う方法を教えてください:

package com.example.gameprocess;


public class GameProcess extends Activity {

private static int rez = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.gameprocess);


 final TextView Textkolvo = (TextView)findViewById(R.id.kolvo);
 final TextView Texttime = (TextView)findViewById(R.id.texttime);
 final Button Butklik = (Button)findViewById(R.id.klik);

そして、このボタンをタップすると、時間が始まります...

 Butklik.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        //Textkolvo.setText(String.valueOf(rez));
    }
});
}
}
4

2 に答える 2

0

秒のメンバー変数を定義する

int secondsLeft = 0;

そしてこれを入れてonCreateください:

final Handler handler = new Handler();

final Runnable updateTimeTask = new Runnable() {
    public void run() {
        secondsLeft--;
        textTime.setText(String.valueOf(secondsLeft));
        if (secondsLeft == 0) {
            textKolvo.setText("Game over.");
        } else {
            handler.postDelayed(this, 1000);
        }
    }
};

butKlik.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        if (secondsLeft == 0) {
            secondsLeft = 60;
            textTime.setText(String.valueOf(secondsLeft));
            handler.postDelayed(updateTimeTask, 1000);
        }
    }
});
于 2013-01-01T21:48:17.097 に答える
-1

BroadCastRecevierを拡張し、これらのインテントを受信できるTimerReceiverを作成するには、次のことを実行できます。

次のインテント を受け取るためにマニフェストファイルで定義し ます。

<receiver android:name=".TimerReceiver" exported="false" >

    <intent-filter >
        <action android:name="com.yourpackagename.starttimer"/>
        <action android:name="com.yourpackagename.endtimer"/>
        <action android:name="com.yourpackagename.restarttimer"/>
    </intent-filter>

</receiver>

アプリケーションでBroadcastReceiverを作成するために必要なもの

public class TimerReceiver extends BroadcastReceiver {

public static final String START_TIMER  =  "com.tcs.starttimer";
public static final String END_SESSION  =  "com.tcs.endsession";
public static final String RESTART_SESSION="com.tcs.restartsession";

private int sessionTimer=10*60*1000; //your time of counter in miliseconds
private int tickTime=1000; //tick time to decrease the counter in one milisecond


@Override
public void onReceive(Context contextdata, Intent intent) {

String actionString=intent.getAction();

    if(actionString.equals(TimerReceiver .START_TIMER)){

     timerStart();
}
    } else if(actionString.equals(TimerReceiver .END_SESSION)){

     //write what you want on ending the session

    }

 }


  void timerStart(){

     try{
         cTimer.cancel();
     }catch(Exception e){

     }

     cTimer=new CountDownTimer(sessionTimer,tickTime) {

    @Override
    public void onTick(long millisUntilFinished) {
    counter++;

    }

      @Override
      public void onFinish() {
        //Log.d("counter","finish.counter: "+counter);
        int timeout=(sessionTimer/1000)-(tickTime/1000);
        if(counter==timeout){
        Toast.makeText(context, "Session Timeout",Toast.LENGTH_LONG).show();            
        context.sendBroadcast(new Intent(END_SESSION));
        }

      }
       }.start();
    }

 }

必要に応じて、タイマーを再起動するなどのアクションをもう1つ追加できます。

ボタンをタップしてアクティビティで行う必要があること:

    context.sendBroadcast(new Intent((TimerReceiver .START_TIMER));

私の場合、カウンドを増やしていますが、逆にすることもできます。それがあなたを助けることを願って私のために働くことを楽しんでください。

于 2013-01-02T12:39:09.663 に答える