Time kotlin android studio

Working with Countdown Timer in Android Studio Using Kotlin

Mar 7, 2020 · 6 min read

This tutorial shows you how to implement a countdown timer from scratch using android studio.

Before we dive into the whole technical aspect of this tutorial let’s try and understand what a countdown is or the need for a countdown timer.

What is a countdown?

A countdown is an act of counting down numerals in reverse o rder to zero. We all make use of countdown in our daily lives, is it when you and couple of friends are playing hide-and-seek or when you heat a delicious meal in the microwave or when Lebron James hit a clutch three pointer to win the championship as the clock winds down to 0.

There are lot of examples of times and moment we make use of countdown timers, the famous one we all know is at the launch of a rocket going to space or the countdown to a new year .

So we can see countdown timers are really important. Let get down to coding shall we.

How to implement the countdown timer from scratch using Kotlin on Android Studio

Before going ahead with this tutorial I’m assuming you having basic understanding of Kotlin programming and android studio.

Lets get to work!

1. Start a new project on Android studio

Select the empty activity so we would be able to create our own views

2. Configure your Project

You can name your app whatever like, i would be using CountdownApp

3. Lets design our view

Android development make use of the XML coding to design views for android apps.

So we are making use of the constraintlayout an EditText which takes our input, A TextView to display the progress of our timer and 2 Button to pause and cancel our Timer. Our second button is invisible because we want to only show that button whenever the timer is paused.

Now our app looks like this

5. Kotlin code for the Countdown Timer

Explanation of code

The Countdown timer package in android takes in time in milliseconds, so we had to convert our time to milliseconds and 1 minute equal to 60000 milliseconds.

start_mili_seconds initializes our timer text to start countdown from one minute in the absent of an inputted minute. The is_running variable helps us check if our timer is running so we are able to change the button text and also make the reset button visible whenever the is_running variable is true.

On click of the button that triggers the timer, we check if is_running is true we run the pauseTimer() function which changes the button text to pause and makes the reset button visible and also pause the timer, or else it takes the text from the EditText and converts it to a milliseconds and pass it as a parameter to the startTimer() function which then start our timer.

Читайте также:  Версия warface для андроид

The startTimer() function consist of the whole logic we need to start our countdown, first we create a global variable:

which makes out CountDownTimer class available where we need it, now we need to initialize the countdown_timer

we make use of object declaration to initialize our CountDownTimer class which takes in 2 arguments:

  1. The time you intend to countdown in seconds and for us we named it as time_in_seconds
  2. The amount of time reduced in seconds, here we are using 1000 that’s per milliseconds reduce the time_in_seconds

It has two (2) implemented methods which are the onTick() and onFinish()

The onTick updates our UI text ( Textview) on the time remaining for the countdown to reach zero.

The updateTextUI() function converts our time_in_milliseconds and display it in actual minute and seconds so the user is able to understand and monitor the countdown timer.

Once the countdown is finished the onFinish() loads a confetti function which displays konfetti around the screen for successful completion of the countdown

To be able to use the Konfetti in your app you need to add this to your build.gradle file

and also add this to your MainActivity.kt file

Now that we have our countdown and konfetti. we want to be able to reset our timer when we want and that’s why we have the resetTimer() function

This function resets our timer back to 0 and hides the reset button so we start the timer all over again.

Источник

Пишем на Kotlin под Android

Года два назад я обнаружил, что в Android Market нет удобных мне приложений для учета времени, затраченного на разные проекты. Как настоящий лентяй, я решил не искать требуемое, а написать его сам. Это оказалось несколько сложнее, чем казалось вначале, и я все забросил в режиме вялотекущего хобби воплощение моего желания прожило больше года, медленно продвигаясь от идеи к альфа-версии.

И тут вдруг добрые люди предложили мне рассказать, как писать под Android на Kotlin’e. Мне показалось, что это добрый знак, и я быстро переписал приложение на Kotlin, закончил его и выложил в Google Play.

Важное уточнение: эта статья — только про то, как писать под Android на Kotlin’e. Интересно будет только тем, кто хочет попробовать Kotlin, и тем, кто хочет понять, зачем его пробовать. Приложение, которое я написал — очень-очень простое (и само по себе никак не относится к JetBrains). В его коде гарантированно можно что-то улучшить, оно выложено на Github только для примера, а не в качестве образца восхитительного кода. Оно работает, и если вам хочется его попробовать, то поставить можно отсюда. Но еще раз: это — демо, его цель — быть не совершенным приложением, а введением в Kotlin под Андроид.

Опять что-то новое. И зачем мне это знать?

Чтоб не оттягивать самое интересное, упомянем только самые главные преимущества Kotlin’a:

  • компактность кода. Быстро писать, легко читать, меньше наведенных ошибок;
  • встроенная защита от ошибок, прежде всего — nullability, т. е. требование к программисту явно указывать, что некая переменная может принимать значение null;
  • легкость в освоении (по-моему, даже начинающий разработчик на Java освоит Kotlin без труда).

На Kotlin’e можно писать значительно быстрее, чем на Jav’e, и код, на мой взгляд, получается более красивым.

Кстати, на github’e уже более 200 репозиториев с кодом на Kotlin’e, а если говорить про мобильные приложения, то Kotlin использовался при разработке мессенджера Telegram.

Читайте также:  Портативный проектор для android

Ну ладно, а с чего начать-то?

Для работы потребуется IDE. Я по очевидным причинам предпочитаю IntelliJ IDEA, однако JetBrains делает плагин Kotlin и для Eclipse, а любители vim могут пользоваться отдельным компилятором языка.

Дальше будем предполагать, что все, кто пожелает попробовать Kotlin в деле под Android, будут использовать IntelliJ IDEA. Для работы понадобится установить плагин Kotlin и позаботиться, чтобы на компьютере были gradle и Android SDK (это к Kotlin’y отношения не имеет, это надо для разработки под Android на чем угодно).

Вначале была Java

У меня уже было частично написанное приложение, когда я решил довести его до конца. Все было написано на Java.

Суть приложения: на экране есть список красных задач, если кликнуть по задаче, она зеленеет, и время пошло: это значит, что пользователь работает над задачей. Как прекратил — кликает по ней еще раз, и задача снова краснеет, показывая, как немного времени он на нее потратил. Приложение слепо доверяет пользователю, не проверяя его никак: это вам не «большой брат смотрит за тобой» от oDesk’a.

То, что было написано на Java, я хотел переписать на Kotlin, душа просила кода на 100% на Kotlin, несмотря на то, что в одном проекте можно использовать код на Java и на Kotlin’e одновременно. Оказалось, что с унаследованным кодом все просто: рядом с src/main/java создаем папку src/main/kotlin, и в нее помещаем классы. Файлы в Kotlin’е заканчиваются не на .java, а на .kt. Тут к месту оказался приятный момент: Kotlin не требует соответствия «один класс — один файл». Можно в один файл запихнуть столько классов, сколько хочется по логике приложения. В моем приложении было всего две логических части — работа с базой данных и экранный интерфейс пользователя, так что количество файлов можно было сократить.

Плагин Kotlin к IntelliJ IDEA умеет конвертировать файлы .java в файлы .kt, выполняя аккуратную трансляцию из Java в Kotlin. Можно это делать через правый клик по файлу и контекстное меню, а можно — прямо при копировании кода на Java в файл .kt (плагин спросит, не сконвертировать ли).

Пишем код на Kotlin’e

Код на языке Kotlin компактен: например, класс вместе с конструктором и getters/setters описывается так:

Посмотрим на код, который создает диалог для ввода текста по клику на кнопку.

Согласитесь, код на Kotlin’e читается проще. Для внимательного читателя заметим, что это, конечно, только фрагмент кода, так как при создании диалога нужна не только кнопка «ОК», но и кнопка «Отмена». Полностью код выложен на Github.

Что дает возможность так сокращать код? Например, в Kotlin’e возможна такая форма записи: если где-то в качестве параметра ожидается экземпляр класса с одним абстрактным методом, туда можно просто передать лямбду: именно это и показано в примере выше.

Обратите внимание, что в Kotlin’e можно не указывать тип переменной, так как он будет выведен из правой части присваивания:

Java Kotlin
AlertDialog.Builder alert = new AlertDialog.Builder (this); val alert = AlertDialog.Builder(this)

Интересная особенность синтаксиса в Kotlin’e: если в функцию передаются параметры, и последний параметр — функция, то ее можно вынести за скобки. Именно это мы видим во фрагменте, где в setPositiveButton передается лямбда, которая сработает по нажатию кнопки «ОК»:

То же самое можно записать как

Вы вольны сами выбрать, какой вариант кажется проще для чтения.

Использование библиотек на Java в коде на Kotlin’e

Еще один приятный момент — возможность напрямую использовать библиотеки, написанные на Java, из кода на Kotlin.

Читайте также:  Террария андроид тыквенная луна

Например, чтобы нормально обрабатывать спецсимволы и Unicode в названиях проектов при сохранении их в SQLite, я использовал функции StringEscapeUtils.escapeJava и StringEscapeUtils.unescapeJava из популярной библиотеки, которую достаточно импортировать оператором import (и вписать в зависимости в свойствах проекта):

Возвращаемое значение

В Kotlin в функциональных литералах (a.k.a лямбда-функциях) запрещено использовать return, так как функциональный литерал возвращает значение, вычисленное в последнем выражении. Так, в вызове setOnTouchListener ожидается, что последний параметр вызова — функция, возвращающая boolean. Это значение фактически возвращает gestureDetector.onTouchEvent(aEvent).

В коде функционального литерала на Kotlin нельзя писать return gestureDetector.onTouchEvent(aEvent), результат вызова gestureDetector.onTouchEvent(aEvent) и так будет возвращен.

На самом деле есть специальные случаи, когда в функциональном литерале следует использовать нелокальный return. Если интересно, подробности есть в документации по Kotlin

Аналогично работает возврат значений функциями, определенными через знак «=», вот так:

Строковые шаблоны

Чтобы избавиться от длинных строк, трудных для чтения и дающих неоптимальный байт-код, в Kotlin’e применены строковые шаблоны (string templates):

Здесь projectToDelete — это строковая переменная. Синтаксис такого шаблона привычен любому, кто имел дело с переменными среды в UNIX, например. Особенно удобны шаблоны для строк, составленных из текста и значений многих переменных, да еще и с форматированием:

Между прочим, с форматированием по ходу дела вышла интересная история: тип String в Kotlin — свой, и метода format в нем нет, поэтому пришлось импортировать java.lang.String.format явным образом и потом к нему так обращаться. Удивительно, кстати, что ни в Java, ни в Kotlin’e до сих пор нет метода secondsToHumanReadableString, преобразующего целое число секунд в строку формата

when и with

Очень удобно использовать when для множественного выбора и with для сокращения обращений к методам и свойствам — и того, и другого хватает даже в маленьком приложении под Android. В моем случае это давало более легкий в чтении код, например:

Без with получились бы alert.setPositiveButton, alert.setNegativeButton, alert.create, alert.show. When тоже повышает читаемость:

Компиляция с помощью Gradle

Если вы создаете build.gradle руками и/или собираете проект gradle’ом без IDE, то прочтите, как сдружить gradle, Kotlin и Android на сайте Kotlinlang.org.

Не знаю, есть ли такая проблема у пользователей Android Studio, но у привычного к IntelliJ IDEA человека работа с Gradle может вызвать вопрос, как собрать .apk для релиза, а не для отладки.

Для этого в IDEA есть плагин Gradle, открывается кликом по табу справа:

По умолчанию IDEA собирает *-debug-unsigned.apk, т.е. то, что в Google Play не положишь. Чтобы оно стало *-release-signed.apk, надо сгенерировать ключ для подписи, положить его в keystore, и вписать несколько строк в build.gradle вашего проекта, чтобы Gradle знал, где ключ взять. Для сборки release, выберите в окне Gradle задачу assembleRelease двойным кликом по ней.

Про то, как создавать ключ и подписывать приложение вы либо уже знаете, либо можете прочесть подробнее на stackoverflow.

На заметку

Недавно открылся наш новый сайт про Kotlin kotlinlang.org, который хостится на Jekyll+Github. Чем это решение хорошо, на Хабре недавно уже писали.

Если в статье какие-то примеры кода показались вам красивыми, то это — несомненная заслуга Натальи Ухорской, которая работает у нас в команде Kotlin. Я очень благодарен Наташе за советы, без которых эта статья оказалась бы короче, а код — менее похожим на классический Kotlin.

Мы будем очень рады, если сэкономленные за счет использования Kotlin часы вы сможете провести на пляже. Хорошего остатка лета!

UPD от 31.07.14, 18:55: поправлены некоторые термины и формулировки.

Источник

Оцените статью