2016-10-19 4 views
0

Я разрабатываю приложение для Android, которое отображает таймер android.widget.Chronometer.Может Android Chronometer показать 90 минут как 90:00 НЕ 1:30:00

Поскольку это приложение, связанное с спортом, мне нужен таймер, чтобы показать 90 минут как 90:00, а не 01:30:00.

Является ли мой единственный вариант для создания пользовательского Chronometer?

+3

Если вы сомневаетесь, проверьте источник: https://android.googlesource.com/platform/frameworks/base/+/master/core/ java/android/widget/Chronometer.java Из-за внешнего вида, поскольку 90:00 не является допустимым форматом даты и времени Java, вам нужно будет выполнить обычай. –

ответ

1

Определить экземпляры управления

Chronometer chrono; 
Button btnStart; 
Button btnStop; 
TextView txt; 

и некоторые переменные

long elapsedTime=0; 
String currentTime=""; 
long startTime=SystemClock.elapsedRealtime(); 
Boolean resume=false; 

булева флага дифференцироваться между началом хронометра в первый раз или возобновить его после паузы

Теперь для обработки каждое событие нажатия кнопки

super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 
chrono=(Chronometer)findViewById(R.id.chrono); 
btnStart=(Button)findViewById(R.id.btnStart); 
btnStop=(Button)findViewById(R.id.btnStop); 
btnReset=(Button)findViewById(R.id.btnReset); 
txt=(TextView)findViewById(R.id.txt); 

public void onClick(View v) { 
    // TODO Auto-generated method stub 
    switch(v.getId()) 
    { 
    case R.id.btnStart: 
    btnStart.setEnabled(false); 
    btnStop.setEnabled(true); 
    if(!resume) 
    { 
    chrono.setBase(SystemClock.elapsedRealtime()); 
    chrono.start(); 
    } 
    else 
    { 

    chrono.start(); 
    } 

    break; 
    case R.id.btnStop: 
    btnStart.setEnabled(true); 
    btnStop.setEnabled(false); 
    chrono.stop(); 
    chrono.setText(currentTime); 
    resume=true; 
    btnStart.setText("Resume"); 
    break; 
    case R.id.btnReset: 

    chrono.stop(); 
    chrono.setText("00:00"); 
    resume=false; 
    btnStop.setEnabled(false); 
    break; 
    } 
} 


chrono.setOnChronometerTickListener(new OnChronometerTickListener() 
     { 

    public void onChronometerTick(Chronometer arg0) { 
    // TODO Auto-generated method stub 

    if(!resume) 
    { 

    long minutes=((SystemClock.elapsedRealtime()-chrono.getBase())/1000)/60; 
    long seconds=((SystemClock.elapsedRealtime()-chrono.getBase())/1000)%60; 
    currentTime=minutes+":"+seconds; 
    arg0.setText(currentTime); 
    elapsedTime=SystemClock.elapsedRealtime(); 
    } 
    else 
    { 

    long minutes=((elapsedTime-chrono.getBase())/1000)/60; 
    long seconds=((elapsedTime-chrono.getBase())/1000)%60; 
    currentTime=minutes+":"+seconds; 
    arg0.setText(currentTime); 
    elapsedTime=elapsedTime+1000; 
    } 

Метод onChronometerTick обрабатывает событие хронометр тик, которое происходит каждый второй

chrono.setOnChronometerTickListener(new OnChronometerTickListener() 
     { 

    public void onChronometerTick(Chronometer arg0) { 
    // TODO Auto-generated method stub 

    if(!resume) 
    { 

    long minutes=((SystemClock.elapsedRealtime()-chrono.getBase())/1000)/60; 
    long seconds=((SystemClock.elapsedRealtime()-chrono.getBase())/1000)%60; 
    currentTime=minutes+":"+seconds; 
    arg0.setText(currentTime); 
    elapsedTime=SystemClock.elapsedRealtime(); 
    } 
    else 
    { 

    long minutes=((elapsedTime-chrono.getBase())/1000)/60; 
    long seconds=((elapsedTime-chrono.getBase())/1000)%60; 
    currentTime=minutes+":"+seconds; 
    arg0.setText(currentTime); 
    elapsedTime=elapsedTime+1000; 
    }