一个非常简单的stoper

时间:2015-06-14 06:55:21

标签: java android

所以2天前我开始学习Android技术了。我编写了非常简单的程序,可以使用CountDownTimer类计算时间。这是我的xml代码:

<RelativeLayout

xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#000000"
tools:context=".MainActivity"
android:id="@+id/raf">

<Button
    android:id="@+id/btnStart"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_centerVertical="true"
    android:layout_marginLeft="28dp"
    android:textColor="#76EE00"
    android:background="#2C3529"
    android:text="Start" />

<Button
    android:id="@+id/btnStop"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_centerVertical="true"
    android:layout_marginRight="28dp"
    android:textColor="#76EE00"
    android:background="#2C3529"
    android:text="Stop" />


<TextView
    android:id="@+id/textViewHours"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_centerVertical="true"
    android:layout_marginLeft="100dp"
    android:layout_marginTop="25dp"
    android:layout_below="@+id/btnStart"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="20dp"
    android:textColor="#76EE00"
    android:textSize="25sp"
    android:text="Godziny:"
    />

<TextView
    android:id="@+id/textViewMinutes"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_centerVertical="true"
    android:layout_marginLeft="100dp"
    android:layout_below="@+id/textViewHours"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="20dp"
    android:textColor="#76EE00"
    android:textSize="25sp"
    android:text="Minuty:"
    />

<TextView
    android:id="@+id/textViewSeconds"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="5dp"
    android:layout_alignParentLeft="true"
    android:layout_centerVertical="true"
    android:layout_marginLeft="100dp"
    android:layout_below="@+id/textViewMinutes"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="20dp"
    android:textColor="#76EE00"
    android:textSize="25sp"
    android:text="Sekundy:"
    />

<TextView
    android:id="@+id/textViewTime"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/btnStop"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="17dp"
    android:textColor="#76EE00"
    android:textSize="25sp"
    />

<EditText
    android:id="@+id/editHours"
    android:numeric="integer"
    android:layout_width="50dp"
    android:layout_height="wrap_content"
    android:layout_below="@+id/btnStop"
    android:layout_centerHorizontal="true"
    android:layout_alignParentLeft="true"
    android:layout_marginLeft="220dp"
    android:layout_marginTop="35dp"
    android:text="1"
    android:background="#2C3529"
    android:textColor="#76EE00"
    />

<EditText
    android:id="@+id/editMinutes"
    android:numeric="integer"
    android:layout_width="50dp"
    android:layout_height="wrap_content"
    android:layout_below="@+id/editHours"
    android:layout_centerHorizontal="true"
    android:layout_alignParentLeft="true"
    android:layout_marginLeft="220dp"
    android:layout_marginTop="30dp"
    android:text="0"
    android:background="#2C3529"
    android:textColor="#76EE00"
    />

<EditText
    android:id="@+id/editSeconds"
    android:numeric="integer"
    android:layout_width="50dp"
    android:layout_height="wrap_content"
    android:layout_below="@+id/editMinutes"
    android:layout_centerHorizontal="true"
    android:layout_alignParentLeft="true"
    android:layout_marginLeft="220dp"
    android:layout_marginTop="30dp"
    android:text="0"
    android:background="#2C3529"
    android:textColor="#76EE00"
    />

这里我们有java代码:

   package com.example.rafa.minutnik;

import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.content.DialogInterface;
import android.os.Build;
import android.os.CountDownTimer;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import java.util.concurrent.TimeUnit;

@TargetApi(Build.VERSION_CODES.KITKAT)
@SuppressLint("NewApi")

public class MainActivity extends ActionBarActivity {

    private Button btnStart,btnStop;
    private TextView textViewTime;
    private EditText editHours, editMinutes, editSeconds;
    private int Time;

    public void reset(){
        editHours.setText("");
        editMinutes.setText("");
        editSeconds.setText("");
        textViewTime.setText("");
    }

    @Override
    public View findViewById(int id) {
        return super.findViewById(id);
    }

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

        btnStart = (Button) findViewById(R.id.btnStart);
        btnStop = (Button) findViewById(R.id.btnStop);
        textViewTime = (TextView) findViewById(R.id.textViewTime);
        editHours = (EditText) findViewById(R.id.editHours);
        editMinutes = (EditText) findViewById(R.id.editMinutes);
        editSeconds = (EditText) findViewById(R.id.editSeconds);

        Time = 3600*Integer.parseInt(editHours.getText().toString()) +
                60*Integer.parseInt(editMinutes.getText().toString()) +
                Integer.parseInt(editSeconds.getText().toString());

        final CounterClass timer = new CounterClass(1000*Time,1000);

        btnStart.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                timer.start();
            }
        });

        btnStop.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                timer.cancel();
                reset();
            }
        });
    }

    @TargetApi(Build.VERSION_CODES.KITKAT)
    @SuppressLint("NewApi")
    public class CounterClass extends CountDownTimer{

        public CounterClass(long milisInFuture, long countDownInterval){

            super(milisInFuture,countDownInterval);
        }

        @TargetApi(Build.VERSION_CODES.KITKAT)
        @SuppressLint("NewApi")
        @Override
        public void onTick(long millisUntilFinished) {

            long milis = millisUntilFinished;
            String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(milis),
            TimeUnit.MILLISECONDS.toMinutes(milis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(milis)),
            TimeUnit.MILLISECONDS.toSeconds(milis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(milis)));

            System.out.println(hms);
            textViewTime.setText(hms);
        }

        @Override
        public void onFinish() {

            textViewTime.setText("Finished.");
        }
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

但是有一个很大的缺点,它只能计算固定的起始值的时间。正如您所看到的,我将新的edittext字段更改为小时,分钟和秒的值,但它不起作用,我完全不知道为什么。

有什么建议我做错了吗?

2 个答案:

答案 0 :(得分:1)

您的计时器固定在起始值中,因为在开始按钮的点击事件中没有初始化时间值老化,这就是计时器正在采用其初始值的原因。

希望这个类能澄清一下,在这里替换你的Java类中的onCreate方法片段我改变了你的start click事件也替换了reset方法

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

    btnStart = (Button) findViewById(R.id.btnStart);
    btnStop = (Button) findViewById(R.id.btnStop);
    textViewTime = (TextView) findViewById(R.id.textViewTime);
    editHours = (EditText) findViewById(R.id.editHours);
    editMinutes = (EditText) findViewById(R.id.editMinutes);
    editSeconds = (EditText) findViewById(R.id.editSeconds);

    btnStart.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Time = 3600 * Integer.parseInt(editHours.getText().toString())
                    + 60
                    * Integer.parseInt(editMinutes.getText().toString())
                    + Integer.parseInt(editSeconds.getText().toString());

            if (timer != null) {
                timer.cancel();
                timer = null;
            }
            timer = new CounterClass(1000 * Time, 1000);

            timer.start();
        }
    });

    btnStop.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            timer.cancel();
            reset();
        }
    });
}
public void reset() {
    if (timer != null) {
        timer.cancel();
    }
    editHours.setText("0");
    editMinutes.setText("0");
    editSeconds.setText("0");
    textViewTime.setText("0");
}

答案 1 :(得分:0)

我不确定我是否正确地得到了你的问题,通过开始时间值你的意思是点击停止按钮,计时器转到时间的初始值?如果是这种情况那么这是因为当你点击停止按钮时,你正在调用重置方法。