Интерфейс, диалоги, темы, стили, меню
-
babygluk
- Сообщения: 35
- Зарегистрирован: 13 окт 2013, 17:02
Сообщение
babygluk » 15 окт 2013, 21:16
Подскажите (можно и с примером) как сделать Таймер))
нужно что бы таймер работал - пока живет приложение.
но через каждые n - секунд, делал какие-то действия.
нашел вот такой код))) но javax не находит swing)
Код: Выделить всё
import javax.swing.Timer;
...
//Будет вызыватся каждую секунду
timer=new Timer(1000,new ActionListener(
public void actionPerformed(ActionEvent ev) {
System.out.println("WOW!");
}
));
timer.start();
-
trew
- Сообщения: 450
- Зарегистрирован: 28 сен 2013, 17:34
Сообщение
trew » 15 окт 2013, 21:25
[quote="babygluk"][/quote]
Код: Выделить всё
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends Activity {
public int time = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//Declare the timer
Timer t = new Timer();
//Set the schedule function and rate
t.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
TextView tv = (TextView) findViewById(R.id.main_timer_text);
tv.setText(String.valueOf(time));
time += 1;
}
});
}
}, 0, 1000);
}
}
На TextView отображаем счетчик.
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.
-
babygluk
- Сообщения: 35
- Зарегистрирован: 13 окт 2013, 17:02
Сообщение
babygluk » 24 окт 2013, 22:11
Код: Выделить всё
public void showTimer(int countdownMillis) {
if(timer != null) { timer.cancel(); }
timer = new CountDownTimer(countdownMillis, MILLIS_PER_SECOND) {
@Override
public void onTick(long millisUntilFinished) {
int second = (int) millisUntilFinished / MILLIS_PER_SECOND;
if (second >15 ) countdownDisplay.setTextColor(Color.GREEN);
if ((second < 15)&&( second > 7)) countdownDisplay.setTextColor(Color.YELLOW);
if ( second < 7) countdownDisplay.setTextColor(Color.RED);
countdownDisplay.setText(""+second);
if (TrueAnswer)
{
questionCount--;
count++;
text.setText("");
Toast.makeText(GameAskActivity.this, "TRUE", Toast.LENGTH_SHORT).show();
index = newIndex();
if(timer != null) {
timer.cancel();
timer = null;
}
start();
}
}
@Override
public void onFinish() {
if(!TrueAnswer){
questionCount--;
text.setText("");
Toast.makeText(GameAskActivity.this, "Wrong", Toast.LENGTH_SHORT).show();
if(timer != null) {
timer.cancel();
timer = null;
}
start();
}
}
}.start();
}
Есть таймер.. проблема в том что он не вызывает метод
Тост вызывается, а start() нет..
Код: Выделить всё
public void start(){
if (this.questionCount >0){
Toast.makeText(GameAskActivity.this, "Новый вопрос осталось вопросов"+questionCount, Toast.LENGTH_LONG).show();
makeQuestion();//створюєм питання
showTimer(SECONDS_TO_COUNTDOWN * MILLIS_PER_SECOND);
}
else
finish();
}
а когда я попадаю в if (TrueAnswer) то зависает програмка)
-
klblk
- Сообщения: 1097
- Зарегистрирован: 18 окт 2012, 11:17
- Откуда: г. Красноярск
Сообщение
klblk » 25 окт 2013, 07:05
что-то тут не так...
не вижу логики использования в onFinish функций start и cancel?
-
babygluk
- Сообщения: 35
- Зарегистрирован: 13 окт 2013, 17:02
Сообщение
babygluk » 25 окт 2013, 07:34
возможно)
Идея была такая
Таймер 20 секунд
Если я отвечаю на вопрос правильно TrueAnswer = True
{
плюсонуть\откинуть счетчики
Сгенерировать новый вопрос
и заново запустить таймер.
}
Если время закончилось и я не ответил то
{
плюсонуть\откинуть счетчики
Сгенерировать новый вопрос
и заново запустить таймер.
}
И условие где то поставить, после последнего вопроса, закончить работу таймера
-
klblk
- Сообщения: 1097
- Зарегистрирован: 18 окт 2012, 11:17
- Откуда: г. Красноярск
Сообщение
klblk » 26 окт 2013, 06:15
а блин, start() это не тот старт) ну в любом случае в функции onFinish() не нужно делать timer.cancel(), вашу функцию start() наверное стоит применять както типа MyActivity.this.start().
В onTick() наверное лучше не делать timer.cancel и timer = null, а лучше это сделать там где вы получаете TrueAnswer (кстати не пользовался этим классом, если мы делам cancel то функция onFinish не срабатывает? если срабатывает, то в onTick не нужно "ваш" start делать, ведь он есть в финише, ну и не уверен что timer = null хорошая идея)
-
knight
- Сообщения: 44
- Зарегистрирован: 21 сен 2012, 09:25
Сообщение
knight » 26 окт 2013, 10:16
Timer timer = new Timer();
TimerTask task = new TimerTask()
{
public void run()
{
// тут делаем свистопляски нам нужные
}
};
timer.schedule(task, 0, 60000); // запускаем таймер, теперь таймер таск будет вызываться каждую минуту
timer.cancel(); //остановить таймер
-
knight
- Сообщения: 44
- Зарегистрирован: 21 сен 2012, 09:25
Сообщение
knight » 26 окт 2013, 10:28
babygluk писал(а):возможно)
Идея была такая
Таймер 20 секунд
Если я отвечаю на вопрос правильно TrueAnswer = True
{
плюсонуть\откинуть счетчики
Сгенерировать новый вопрос
и заново запустить таймер.
}
Если время закончилось и я не ответил то
{
плюсонуть\откинуть счетчики
Сгенерировать новый вопрос
и заново запустить таймер.
}
И условие где то поставить, после последнего вопроса, закончить работу таймера
int colvopros=10;
boolean TrueAnswer = false;
int ozenka=0;
Timer timer = new Timer();
TimerTask task = new TimerTask()
{
public void run()
{
if(TrueAnswer==true)
{
colvopros--;
ozenka+=5;
}
else
{
colvopros--;
}
if(colvopros==-1)
{
timer.cancel();
}
}
};
timer.schedule(task, 20000, 20000); // запускаем таймер, теперь таймер таск будет вызываться каждую минуту
чет вроде этого, дальше самому можно привязать к UI