Урок 2 : Пишем алгоритм работы

Приложение "Светофор" Часть 2: Пишем алгоритм работы

Начнем писать алгоритм работы приложения. На данном уроке мы подготовим основные части кода. Самое первое нам нужно инициализировать наши 3 квадрата которые у нас в качестве лампочек и кнопку “Start“. Мы создадим переменные типа “LinearLayout” так как квадраты на экране которые мы будем использовать в качестве лампочек и есть “LinearLayout” и переменную для кнопки “Button“. У нас три лампочки, значит создадим 3 переменных (bulb_1, bulb_2, bulb_3) и для кнопки (b). Теперь после того как мы создали переменные нам нужно присвоить им наши реальные лампочки (квадраты) и кнопку , для того чтобы с помощью переменной мы могли изменять цвет квадрата и надпись на кнопке, так как переменная после присвоения ей реального значения будет представлять нашу лампочку (квадрат) в коде и кнопку. Для того чтобы получить элемент экрана в коде мы используем функцию которая есть у класса Activity “findViewById();“. В этой функции мы просто указываем id нашего элемента “findViewById(R.id.bulb_1);” и готово (данную функцию мы впишем в функции “onCreate”), установим цвета для лампочек по умолчанию с , что бы при открытии приложения первая лампочка была зеленая а две других желтые, используем функцию “setBackgroundColor(getResource.getColor(R.color.grey));“, данная функция выбирает цвет фона элемента на экране, мы используем ее для всех трех лампочек. Теперь у нас есть доступ для управления лампочками и кнопкой с помощью четырех переменных, но нам нужно чтобы цвет менялся автоматически через определенный промежуток времени. Как быть?? Мы создадим повторяющийся цикл который запустится при нажатии на кнопку “Start” и остановится при нажатии на кнопку “Stop“. Но есть одна проблема!! Весь код который мы писали до этого момента работает на основном потоке, на котором работает UI (User Interface)  а именно где пользователь взаимодействует с нашим приложением, если мы запустим цикл на основном потоке то пока цикл не закончится экран перестанет реагировать на нажатия пользователя, это означает что пользователь не сможет нажать на кнопку “Stop”  и цикл никогда не остановиться!! Вот дела!! Нет проблем, есть решение, а именно создать второстепенный поток который не будет влиять на основной. Для этого мы используем класс  Thread этот класс запускает новый поток и он не влияет на основной поток так что пользователь сможет взаимодействовать с нашим приложением при запущенном цикле. создаем новый поток в слушатели нажатий onClickStart(); и таким образом новый поток будет создан при нажатии на кнопку. Внутри нового потока пишем цикл while. Работа цикла зависит от логического значения boolean, если это true то цикл повторяется пока значение не станет false, тогда цикл завершиться. По этому создадим переменную типа “boolean start_stop = false;” по умолчанию присвоим значение false и передадим ее в наш цикл “while(start_stop){}“. При нажатии на кнопку “Start” создастся новый поток и внутри нового потока запустится цикл, так как по умолчанию мы присвоили значение нашей переменной “start_stop = false;” поток не запустится, мы это сделали для того что бы подготовить код к следующему шагу, в следующей части мы это доделаем. Когда цикл будет запущен если хотим остановить цикл то нам нужно просто установить нашей переменной значение false start_stop = false;“. Мы будем останавливать цикл при нажатии на кнопку “Stop” и в случае если пользователь не нажав кнопку “Stop” закроет приложение. То есть мы должны убедиться что если пользователь закрыл приложение цикл остановлен. Это легко можно сделать в функции “onDestroy” на прошлом уроке мы говорили о цикле жизни Activity и об функции “onDestroy“. Теперь нам осталось дописать код для переключения цветов и для остановки цикла при нажатии на кнопку “Stop“, это мы сделаем в следующей части, ниже находиться код MainActivity, копируем все в ваш файл MainActivity только оставляйте самую верхнюю строку с названием вашего пакета, например у меня это “package com.neco_desarrollo.trafficlight;” так как имя пакета у всех разное, все остальное можно скопировать.

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;
public class MainActivity extends AppCompatActivity {
LinearLayout b_1, b_2, b_3;
private boolean start_stop = false;
private Button b;
@Override
 protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b = findViewById(R.id.button1);
b_1 = findViewById(R.id.bulb_1);
b_2 = findViewById(R.id.bulb_2);
b_3 = findViewById(R.id.bulb_3);
b_1.setBackgroundColor(getResources().getColor(R.color.green));
b_2.setBackgroundColor(getResources().getColor(R.color.grey));
b_3.setBackgroundColor(getResources().getColor(R.color.grey)); } public void onClickStart(View view) { new Thread(new Runnable() { @Override public void run() { while (start_stop) { } } }).start(); } @Override protected void onDestroy() { super.onDestroy(); start_stop = false; } }

Добавить комментарий

Ваш адрес email не будет опубликован.