Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Метод в новом потоке срабатывает только один раз - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Ошибка в контекстном меню AppCompatActivity http://www.cyberforum.ru/android-dev/thread1854088.html
Здравствуйте! Я только начинаю изучать разработку под Android. Использую IDE Android Studio 2.2.2, встроенный эмулятор, Android SDK Platform 24. Не знаю, по адресу ли обратился, но самостоятельно...
Программирование Android Блокировка кнопки на час У меня есть кнопка, я хочу, что бы при её нажатии она блокировалась на час, естестественно, при перезапуска таймер шел дальше. Час проходит - она активная. Как это называется, и как это сделать? http://www.cyberforum.ru/android-dev/thread1854055.html
Программирование Android Один Executor на все приложение
Здравствуйте. Начала изучать андроид и по учебе встала такая задача написать читалку для новостей все худо бедно пишется но уперся в одном месте Нужно создать один пул нитей на все приложение. с...
Как добавить событие в календарь Программирование Android
Такой вопрос. Как добавить событие в календарь ? Видел в одном приложении что можно.
Программирование Android Перевод значения из Text Edit в hex http://www.cyberforum.ru/android-dev/thread1853728.html
Добрый день! подскажите как перевести в Hex. msgG = edit_send.getText().toString(); пробывал msgG = edit_send.getText().toHexString(); но нифига не работает. Чего то непонимаю
Программирование Android Работа с устройством через bluetooth Требуется сделать приложение на андройд чтобы оно соединялось с блютуз устройством и приняло от него данные. Идея создать блютуз передатчик с установленным датчиком давления, надо принять с него... подробнее

Показать сообщение отдельно
Catchermax
0 / 0 / 0
Регистрация: 18.11.2016
Сообщений: 7

Метод в новом потоке срабатывает только один раз - Программирование Android

18.11.2016, 19:17. Просмотров 134. Ответов 0
Метки (Все метки)

Господа комрады, выручайте)

В целях обучения себя любимого пишу простенькую игрушку, смысл заключается в том что на экране появляется ImageButton и она должна перемещаться по экрану в случайную координату каждую секунду (с течением времени должна ускоряться) и на неё надо нажать, если успел то зачисляется одно очко. Вот, вроде звучит просто, но сломал себе голову над таймером.

Вот полный код
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package com.example.max.davydparty;
 
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.TextView;
 
import java.util.Random;
import java.util.concurrent.TimeUnit;
 
public class MainActivity extends Activity {
    private int countDavyds;//это счетчик давыдов
    private ImageButton faceDavyd;//изоброжение Давыда
    public int getCountDavyds() {
        return countDavyds;
    }
    public void setCountDavyds(int countDavyds) {
        this.countDavyds = countDavyds;
    }
 
    public int time;//это время, оно будет идти в обратную сторону
    public int getTime() {
        return time;
    }
    public void setTime(int time) {
        this.time = time;
    }
 
    Random random=new Random();
    //метод выдающий координату ширины
    public int getRandomCoordinateWidth() { //!!поменять значения до какого рандом может меняться, так как не знаю полные координаты
        return random.nextInt(575);
    }
    //метод выдающий координату высоты
    public int getRandomCoordinateHeight() { //!!поменять значения до какого рандом может меняться, так как не знаю полные координаты
        return random.nextInt(1090);
    }
 
    private TextView countDavydsTextView;//две переменные для редактирования значений в таймере и давыдах
    public TextView timeTextView;
    public boolean flagStop=true;//это флаг который выкидывает false когда надо остановиться
 
 
 
    //метод движения
    public void Run(){
        faceDavyd.setX(getRandomCoordinateWidth());
        faceDavyd.setY(getRandomCoordinateHeight());
    }
    //метод вычисления времени
    public void davidsAndTime(){
        faceDavyd.setX(getRandomCoordinateWidth());
        faceDavyd.setY(getRandomCoordinateHeight());}
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);//эти две строки мы сделали
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); //чтобы забрать весь экран =)
        setContentView(R.layout.activity_main);
        setCountDavyds(0);//установили начальное значение давыдов
        setTime(30);//установили начальное значение таймера
        countDavydsTextView=(TextView)findViewById(R.id.textViewDavyds);//привязано к текстовому полю Давыды
        timeTextView=(TextView)findViewById(R.id.textView2Time);
        countDavydsTextView.setText("Давыды: "+getCountDavyds());//назначили начальные условия
        timeTextView.setText("Время: "+getTime());
        faceDavyd=(ImageButton)findViewById(R.id.imageButton);
 
        //начинаем обрабатывать перемещение давыда само по себе
        Thread t = new Thread(new Runnable() {//метод заставляющий давыда двигаться с все большей скоростью нужно доделать
            public void run() {
                try {
                    while(time>0){
                    TimeUnit.MILLISECONDS.sleep(1000);
                    Run();}
 
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        t.start();
 
        Thread w = new Thread(new Runnable() {//метод уменьшающий время
            public void run() {
 
                try {
                    while (time>0){
                    TimeUnit.MILLISECONDS.sleep(1000);
                    setTime(getTime()-1);
                        timeTextView.setText("Время: "+getTime());
                    }
 
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
        w.start();
        
    }
 
 
 
    public void onClickHeadDavyd(View view) {
 
    }
 
 
}
А вот собственно участок который вызывает много вопросов

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Thread w = new Thread(new Runnable() {//метод уменьшающий время
            public void run() {
 
                try {
                    while (time>0){
                    TimeUnit.MILLISECONDS.sleep(1000);
                    setTime(getTime()-1);
                        timeTextView.setText("Время: "+getTime());
                    }
 
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
        w.start();
Тут пока таймер не будет равен нулю, поток должен засыпать на секунду, потом уменьшать значение time и записывать это значение в поле TextView. Но при запуске поле меняется с 30 на 29 и останавливается, почему time меняется, но новое значение не записывает в TextView(записывает только один раз)?
При этом аналогичный код в котором кнопка прыгает по экрану работает как надо
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
Thread t = new Thread(new Runnable() {//метод заставляющий давыда двигаться с все большей скоростью нужно доделать
            public void run() {
                try {
                    while(time>0){
                    TimeUnit.MILLISECONDS.sleep(1000);
                    Run();}
 
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        t.start();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru