Showing posts with label android. Show all posts
Showing posts with label android. Show all posts

Tuesday, December 12, 2017

Android transitions: плавное появление и исчезновение

Уж что-то я очень давно ничего не писал, надо бы это исправить:)
Изменим стандартные появления нового активити и его закрытия. Сделаем его плавно появляющимся.
Создаем анимации:
R.anim.activity_open_enter
<set    xmlns:android="http://schemas.android.com/apk/res/android"    android:shareInterpolator="false"    android:zAdjustment="top"    android:duration="2500">
    <alpha        android:duration="@android:integer/config_shortAnimTime"        android:fillAfter="false"        android:fillBefore="false"        android:fillEnabled="true"        android:fromAlpha="0.0"        android:interpolator="@android:interpolator/decelerate_cubic"        android:toAlpha="1.0" />
    <scale        android:duration="@android:integer/config_shortAnimTime"        android:fillAfter="false"        android:fillBefore="false"        android:fillEnabled="true"        android:fromXScale="1.1"        android:fromYScale="1.1"        android:interpolator="@android:interpolator/decelerate_quint"        android:pivotX="50%p"        android:pivotY="50%p"        android:toXScale="1.0"        android:toYScale="1.0" />
</set>
 
R.anim.activity_close_bottom
<set    xmlns:android="http://schemas.android.com/apk/res/android"    android:shareInterpolator="false"    android:zAdjustment="bottom"    android:duration="2500">
    <alpha        android:duration="@android:integer/config_shortAnimTime"        android:fillAfter="false"        android:fillBefore="false"        android:fillEnabled="true"        android:fromAlpha="0.0"        android:interpolator="@android:interpolator/decelerate_cubic"        android:toAlpha="1.0" />
    <scale        android:duration="@android:integer/config_shortAnimTime"        android:fillAfter="false"        android:fillBefore="false"        android:fillEnabled="true"        android:fromXScale="1.1"        android:fromYScale="1.1"        android:interpolator="@android:interpolator/decelerate_quint"        android:pivotX="50%p"        android:pivotY="50%p"        android:toXScale="1.0"        android:toYScale="1.0" />
</set>
Ну, а далее дело не хитрое - применяем анимацию  к старту активити и, 
соотвественно, к окончанию. Тут главный момент, устранить стандартную анимацию, поэтому добавляем 
OverridePendingTransition.
startActivity(intent);
overridePendingTransition(R.anim.activity_open_enter,0);   
 
@Overridepublic void finish() {
    super.finish();
    overridePendingTransition(R.anim.activity_close_bottom,0);
} 

Thursday, April 13, 2017

RDP для ADB или подключаем телефон удаленно

Проблема: подключить телефон через локальный ноут к Android Studio на удаленном компе. 
Для меня было реальной проблемой из дома что-то протестировать на реальном устройстве, но тут очень прижало, и я решил выяснить как можно решить данную проблему. Постов много, действий тоже. Поэтому решил воспользоваться шикарной разработкой adbportforward.
Смысл утилиты довольно простой - запускаете сервер и клиент, который принимает пробрасываемые пакеты от сервера и вуаля - можно тестировать разработку.
Скачиваем джарник. Через cmd выполняем команду по запуску сервера (Сервер, это ноут, к которому подключен телефон):
"C:\Users\Andromeda\AppData\Local\Android\sdk\platform-tools\" - путь к ADB.
java -jar adbportforward.jar server adblocation="C:\Users\Andromeda\AppData\Local\Android\sdk\platform-tools\" 

На удаленном компе, где стоит Android Studio запускаем клиента:
remotehost - айпи вашего ноута
java -jar adbportforward.jar client "C:\some\Android\sdk\platform-tools\" 
remotehost=10.0.1.2
Готово, можно вести разработку через RDP и тестировать у себя на телефоне. 
Огромное спасибо автору данной утилиты
 Успехов!

Tuesday, October 25, 2016

Android: проверяем наличие обновления приложения

Решил сегодня озадачиться вопросом алгоритмом обновления приложения, если новая версия есть, то показывать пользователю об этом уведомление. Как ни странно, но готового функционала не оказалось, даже сам Market не предоставляет никакого API для проверки обновлений. Начал искать на просторах всемирной сети -решения, конечно, меня не порадовали - парсить json'ы, бэграунд службы, и еще более нудные и тугие пути. Я тоже пошел сначала по пути парсинья json'a, но потом отказался от этого. Если нет апи, и проверять наличие некоторого отдельного файла, то пусть этим фалом окажется Firabase!
Создал простую структуру:
---Root
    ---SystemInfo
        ---Version : 5
Получаем это значение с помощью:
dataService.getSystemInfo()
При загрузке буду проверять данную ветку и значение текущей версии из градла(Gradle), на основе полученных данных будет вызываться диалог с предложением обновить версию приложения.

Успехов!

Wednesday, October 19, 2016

Android Studio: обновление 2.2.2.0

После последнего обновления студии, а именно 2.2.1 при билдинге программы "градле" зависал так, что "мама не горюй", порой доходило до 5 минут ожидать при сборке (иногда даже возникали мысли: "А не откатиться ли обратно?") А что делать? Приходилось ждать! С выходом новой версии нам обещают сладкую жизнь =)
1. Изменения к Instant Run - добавляя новые изменения в код и ресусные файлы можно увидеть сразу же изменения в запущенной программе на эмуляторе или телефоне.
2. Обновился так называемый интеллектуальный редактор кода (Intelligent code editor). Как по мне он и так был не плох, а теперь основные изменения коснулись редактирование ресурсных файлов, там где он был и нужен.
3. Fast and feature-rich emulator. Обновления коснулись и эмулятора. Сейчас запуская на одном компе и студию и эмулятор появляются иногда тормоза, не критично, но порой раздражает. Теперь же мы должны насладиться небывалой скоростью, от того как работает эмулятор - заявлено, что работает он быстрее чем физическое устройство и эмуляторов целая куча: от телефонов, таблеток до ТВ-устройств.
4. Robust and flexible build system. Изменения коснулись и градла - скрещиваем пальчики и ждем первого билда. В проекте стало просто использовать несколько вариантов сборки, даже с разными наборами включенных библиотек. Gradle(градл) - продвинутый набор инструментов, позволяющий управлять процессом сборки приложения, и создавать гибкие пользовательские конфигурации построения. Плагин gradle в android предназначен для работы с инструментами построения процессов и настраиваемых параметров, которые являются специфическими для разработки и тестирования Android-приложений. Более детально про градл.
5.Code templates and GitHub integration - а вот и что-то новенькое. Интеграция с ГитХабом. Добавилось возможно импортировать примеры кода с Гитхаба и вести свои собственные шаблоны, что немаловажно!
Все изменения описаны в статье, ну а нам только предстоит протестировать данный функционал.

Успехов!






Tuesday, October 18, 2016

Android: переименование приложения

В случае, когда вам понадобилось переименовать приложение, а такое обычно бывает, когда вы при создании приложения оставили все по умолчанию (имя пакета будет в формате
com.example.something), а потом решили опубликовать его в GooglePlay,
то такой вариант не пройдет! Придется возвращатсья к истокам и переименовывать весь пакет. Самый удобный способ - это создать новый модуль и в него отрефакторить все ваши наработки:
Теперь выделяете все: активити, классы, фрагменты, все-все и говорите перенести в новый модуль. У нового модуля новое имя, конечно же! Далее нужно переименовать вручную все значения в манифесте и в градле.

Плюс, ко всему у меня не поменялись некоторые файлы в проекте, пришлось вручную поправить! А именно пришлось менять
import com.example.name.lalala.R
на 
import com.lalala.R
 
Успехов!  

Friday, August 12, 2016

Приложение География.Флаги

Это мое первое приложение под Андройд!
Смысл его банально прост - угадать страну по ее национальному флагу. 

В игре присутствует система выбора региона Мира! По умолчанию выбраны все регионы, но это порядка 190 флагов, надоест, поэтому рекомендую начать с мало - выбрать регион. Очень интересная система "Угадать столицу по флагу страны!" Сам был в шоке насколько быстро стираются из памяти многие знания.
По завершению - выдаются результаты. Очки даются за правильные ответы, чем сложнее уровень - тем больше очков.
Кратко о приложении.
Комментарии приветствуются!

Tuesday, March 29, 2016

Android spinner: Заполняем спинер в зависимости от значений второго спинера

Задача такая: сформировать значения в выпадающих списках в зависимости от того, что вы выберите из списка с родительскими элементами.
Например, список1 содержит значения Audi & Skoda.
Например, список2 содержит значения Audi A1, Audi A2, Skoda Octavia, Skoda Rapid.
Приступим:
Сформируем список1, используя отдельный класс:
public class StringWithTag {
        public String string;
        public Object tag;
        public StringWithTag(String stringPart, Object tagPart) {
            string = stringPart;
            tag = tagPart;
        }
        @Override
        public String toString() {
            return string; }}
сделаем коллекцию:
        List<StringWithTag> myList = new ArrayList<StringWithTag>();
        myList.add(new StringWithTag("Audi","1"));
        myList.add(new StringWithTag("Skoda","2"));
Создадим спинер:
final ArrayAdapter adapter1 = new ArrayAdapter<StringWithTag>(SettingsActivity.this,R.layout.simple_spinner_item1, myList);
        adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner_set1.setAdapter(adapter3);
Создаем слушатель для списка1:
spinner_set1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                if (spinner_set1.getItemAtPosition(position).toString().equals(spinner_set1.getItemAtPosition(position).toString())) {
// у меня происходит наполнение временного списка из списка2(lowList)
                    tempList.clear();
                    for (int i=0;i<lowList.size();i++){
                        if (lowList.get(i).BlockID.equals(String.valueOf(topList.get(position).ID))){
                            tempList.add(new StringWithTag(lowList.get(i).ID,lowList.get(i).BlockID, (Object) lowList.get(i).tag));
                        }
                    }
                    ArrayAdapter adapter2 = new ArrayAdapter<StringWithTag>(SettingsActivity.this,R.layout.simple_spinner_item1, tempList);
                    adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                    spinner_set2.setAdapter(adapter2);
                     //установка реагирования на выборку значений из списка2
                    spinner_set2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                        @Override
                        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                            String strModel = spinner_set2.getItemAtPosition(position).toString();
                        }
                        @Override
                        public void onNothingSelected(AdapterView<?> parent) {
                        }
                    });
}}
Успехов!