SlideShare a Scribd company logo
1 of 18
Download to read offline
Тонкости реализации
Custom View в Android
Илья Демидов, Tinkoff Bank
Структура
Пример
➔ CustomLayout
➔ TextView
➔ CustomView
➔ ImageView
➔ CustomLayout
➔ ImageView
➔ ImageView
Типы компонентов и их свойства
- View.
- ViewGroup extends View.
void onDraw(Canvas canvas); - отрисовка;
void onMeasure(int widthMeasureSpec, int heightMeasureSpec); - расчет
размеров;
void onLayout(boolean changed, int l, int t, int r, int b); - расстановка
детей;
void onTouchEvent(MotionEvent event); - взаимодействие с пользователем;
Отрисовка
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(backgroundColor);
if (!isEmpty()) {
canvas.drawText(text, textBound.left, -textBound.top, textPaint);
}
}
setWillNotDraw(false) - позволяет вызывать отрисовку у ViewGroup
invalidate() - служит для перерисовки View.
Нельзя производить инициализацию объектов и выполнять очень тяжелые
операции. Все данные для отрисоки уже должны быть готовы к моменту
вызова метода.
Расчет размеров
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
int width = 0;
switch (widthMode) {
case MeasureSpec.EXACTLY:
width = widthSize;
break;
case MeasureSpec.AT_MOST:
width = Math.min(widthSize, textBound.left + textBound.right);
break;
case MeasureSpec.UNSPECIFIED:
width = textBound.left + textBound.right;
}
setMeasuredDimension(width, height);
}
Расчет размеров
MeasureSpec.EXACTLY; - точные размеры
MeasureSpec.AT_MOST; - не больше, чем размеры родителя
MeasureSpec.UNSPECIFIED; - любые размеры
setMeasuredDimension(width, height); - после расчета данные обязательно
должны публиковаться с помощью этого метода
requestLayout(); - служит для перерасчета и перерисовки View
Расчет размеров для ViewGroup
private void measureViews(int widthMeasureSpec, int heightMeasureSpec) {
for (int i = 0; i < getChildCount(); i++) {
int childWidthSpec;
View child = getChildAt(i);
LayoutParams lp = child.getLayoutParams();
if (lp.width == LayoutParams.MATCH_PARENT) {
childWidthSpec = MeasureSpec.
makeMeasureSpec(getMeasuredWidth(), MeasureSpec.EXACTLY);
} else {
childWidthSpec = getChildMeasureSpec(widthMeasureSpec,
0, lp.width);
}
child.measure(childWidthSpec, childHeightSpec);
}
}
getChildMeasureSpec(int spec, int padding, int childDimension) - does the hard
part of measureChildren: figuring out the MeasureSpec to pass to a particular child.
Custom LayoutParams
LayoutParams extends ViewGroup.LayoutParams
LayoutParams extends ViewGroup.MarginLayoutParams
ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs);
ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams p);
boolean checkLayoutParams(ViewGroup.LayoutParams p);
ViewGroup.LayoutParams generateDefaultLayoutParams();
Расстановка детей
protected void onLayout(boolean changed, int l, int t, int r, int b) {
int count = getChildCount();
int childLeft = 0;
int childTop = 0;
for (int i = 0; i < count; i++) {
View child = getChildAt(i);
int lc = (int) (childLeft + offset);
if (lc + child.getMeasuredWidth() > r - l) {
lc = (r - l) - child.getMeasuredWidth();
} else if (lc < 0) {
lc = 0;
}
child.layout(lc, childTop, lc + child.getMeasuredWidth(),
childTop + child.getMeasuredHeight());
childLeft += child.getMeasuredWidth();
childTop += child.getMeasuredHeight();
}
}
Взаимодействие с пользователем
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
performPressedState();
return true;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
performUnpressedState();
return true;
default:
return false;
}
}
Взаимодействие с пользователем
MotionEvent.ACTION_DOWN- первое касание
MotionEvent.ACTION_MOVE - движение пальца
MotionEvent.ACTION_UP - пользователь убрал палец
MotionEvent.ACTION_CANCEL - текущее действие было отменено
Так-же содержит индекс касания, время, координаты и т.д.
Если View обработала событие, метод должен вернуть true, иначе false.
Диспетчеризация событий
События пользователя обрабатываются с верхнего уровня до нижнего. Если
старший контейнер может обработать событие, то дети это событие не
получат.
boolean dispatchTouchEvent(); - решает, что делать с событием. Если
контейнер может сам обработать событие, вызывает onTouchEvent(), иначе
вызывает dispatchTouchEvent() своих детей.
boolean interceptTouchEvent() - решает, прокидывать событие дальше или
обработать его самому.
void requestDisallowInterceptTouchEvent(boolean) - запрещает родителям
перехватывать события
Диспетчеризация событий
Activity.
dispatchTouchEvent()
Activity.
onTouchEvent()
GdgLayout.
dispatchTouchEvent()
GdgLayout.
onTouchEvent()
GdgView.
dispatchTouchEvent()
GdgView.
onTouchEvent()
Activity.
dispatchTouchEvent()
Activity.
onTouchEvent()
GdgLayout.
dispatchTouchEvent()
GdgLayout.
onTouchEvent()
GdgView.
dispatchTouchEvent()
GdgView.
onTouchEvent()
ACTION_CANCEL
<?xml version="1.0" encoding="utf-8"?>
<....gdgvrn2015.widget.GdgLayout
android:id="@+id/gdg_group1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center">
<...gdgvrn2015.widget.GdgableTextView
android:id="@+id/gdg_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold" />
<...gdgvrn2015.widget.GdgView
android:id="@+id/gdg_id1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<ImageView
android:layout_width="75dp"
android:layout_height="50dp"
android:src="@drawable/gdg"/>
<...gdgvrn2015.widget.GdgLayout
android:id="@+id/gdg_group2"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:layout_width="75dp"
android:layout_height="50dp"
android:src="@drawable/gdg"/>
<ImageView
android:layout_width="75dp"
android:layout_height="50dp"
android:src="@drawable/gdg"/>
</...gdgvrn2015.widget.GdgLayout>
</...gdgvrn2015.widget.GdgLayout>
Ссылки
https://developer.android.com/intl/ru/training/custom-views/index.html - Creating
custom View;
https://developer.android.com/intl/ru/guide/topics/ui/how-android-draws.html - How
Android Draws Views;
https://youtu.be/EZAoJU-nUyI - Mastering the Android Touch System;
https://github.com/dem1d/GDGfestVoronezh2015 - пример из презентации;
Исходный код View, ViewContainer и стандартных компонентов SDK;
https://twitter.com/dem1d - мой twitter;

More Related Content

Viewers also liked

Visiting unpleasent places
Visiting unpleasent placesVisiting unpleasent places
Visiting unpleasent placesArpanasa
 
Programacion web 1,2,3,4
Programacion web 1,2,3,4Programacion web 1,2,3,4
Programacion web 1,2,3,4Diego Rojas
 
Testing in projects
Testing in projectsTesting in projects
Testing in projectsDataArt
 
76363027 bo-cau-hoi-sinh-dai-cuong 2
76363027 bo-cau-hoi-sinh-dai-cuong 276363027 bo-cau-hoi-sinh-dai-cuong 2
76363027 bo-cau-hoi-sinh-dai-cuong 2doanh2801
 
Николай Грачев (AllBiz) "Продукт и пользователь: дружба начинается с UX"
Николай Грачев (AllBiz) "Продукт и пользователь: дружба начинается с UX"Николай Грачев (AllBiz) "Продукт и пользователь: дружба начинается с UX"
Николай Грачев (AllBiz) "Продукт и пользователь: дружба начинается с UX"DataArt
 
Сергей Зиновьев — Разработка веб-приложений на Rails.
Сергей Зиновьев — Разработка веб-приложений на Rails.Сергей Зиновьев — Разработка веб-приложений на Rails.
Сергей Зиновьев — Разработка веб-приложений на Rails.DataArt
 
Application form
Application formApplication form
Application formsksknba5015
 
Иван Гришаев «Саблайм текст – ИДЕ моей мечты
Иван Гришаев «Саблайм текст – ИДЕ моей мечтыИван Гришаев «Саблайм текст – ИДЕ моей мечты
Иван Гришаев «Саблайм текст – ИДЕ моей мечтыDataArt
 
Александр Кашеверов - Коротко про WEB
Александр Кашеверов - Коротко про WEBАлександр Кашеверов - Коротко про WEB
Александр Кашеверов - Коротко про WEBDataArt
 
Textual analysis of seven
Textual analysis of sevenTextual analysis of seven
Textual analysis of sevenAbbey Cotterill
 
Андрей Беляев "Мыслить как заказчик"
Андрей Беляев "Мыслить как заказчик"Андрей Беляев "Мыслить как заказчик"
Андрей Беляев "Мыслить как заказчик"DataArt
 
Наталья Шпот «Магия приоритетов как ключ к личному счастью»
Наталья Шпот «Магия приоритетов как ключ к личному счастью»Наталья Шпот «Магия приоритетов как ключ к личному счастью»
Наталья Шпот «Магия приоритетов как ключ к личному счастью»DataArt
 
IT Talk smartwatches, Dmitriy Scherbina DataArt Dnepropetrovsk
IT Talk smartwatches, Dmitriy Scherbina DataArt Dnepropetrovsk IT Talk smartwatches, Dmitriy Scherbina DataArt Dnepropetrovsk
IT Talk smartwatches, Dmitriy Scherbina DataArt Dnepropetrovsk DataArt
 
Dc brochure vietv1 (1)
Dc brochure vietv1 (1)Dc brochure vietv1 (1)
Dc brochure vietv1 (1)Nguyet Vo
 
Дмитрий Паньков ( DataArt) "Business intelligence: перспективы для будущих сп...
Дмитрий Паньков ( DataArt) "Business intelligence: перспективы для будущих сп...Дмитрий Паньков ( DataArt) "Business intelligence: перспективы для будущих сп...
Дмитрий Паньков ( DataArt) "Business intelligence: перспективы для будущих сп...DataArt
 
Fiscalidad de internet
Fiscalidad de internetFiscalidad de internet
Fiscalidad de internetJoel Quintana
 
Thriller powerpoint finished
Thriller powerpoint finishedThriller powerpoint finished
Thriller powerpoint finishedAbbey Cotterill
 
Makeinindia-by Rohan Marthak
Makeinindia-by Rohan MarthakMakeinindia-by Rohan Marthak
Makeinindia-by Rohan Marthakronnie890
 
«Как с помощью Google Material Design не делать ». Дмитрий Провоторов
«Как с помощью Google Material Design не делать ». Дмитрий Провоторов«Как с помощью Google Material Design не делать ». Дмитрий Провоторов
«Как с помощью Google Material Design не делать ». Дмитрий ПровоторовDataArt
 

Viewers also liked (19)

Visiting unpleasent places
Visiting unpleasent placesVisiting unpleasent places
Visiting unpleasent places
 
Programacion web 1,2,3,4
Programacion web 1,2,3,4Programacion web 1,2,3,4
Programacion web 1,2,3,4
 
Testing in projects
Testing in projectsTesting in projects
Testing in projects
 
76363027 bo-cau-hoi-sinh-dai-cuong 2
76363027 bo-cau-hoi-sinh-dai-cuong 276363027 bo-cau-hoi-sinh-dai-cuong 2
76363027 bo-cau-hoi-sinh-dai-cuong 2
 
Николай Грачев (AllBiz) "Продукт и пользователь: дружба начинается с UX"
Николай Грачев (AllBiz) "Продукт и пользователь: дружба начинается с UX"Николай Грачев (AllBiz) "Продукт и пользователь: дружба начинается с UX"
Николай Грачев (AllBiz) "Продукт и пользователь: дружба начинается с UX"
 
Сергей Зиновьев — Разработка веб-приложений на Rails.
Сергей Зиновьев — Разработка веб-приложений на Rails.Сергей Зиновьев — Разработка веб-приложений на Rails.
Сергей Зиновьев — Разработка веб-приложений на Rails.
 
Application form
Application formApplication form
Application form
 
Иван Гришаев «Саблайм текст – ИДЕ моей мечты
Иван Гришаев «Саблайм текст – ИДЕ моей мечтыИван Гришаев «Саблайм текст – ИДЕ моей мечты
Иван Гришаев «Саблайм текст – ИДЕ моей мечты
 
Александр Кашеверов - Коротко про WEB
Александр Кашеверов - Коротко про WEBАлександр Кашеверов - Коротко про WEB
Александр Кашеверов - Коротко про WEB
 
Textual analysis of seven
Textual analysis of sevenTextual analysis of seven
Textual analysis of seven
 
Андрей Беляев "Мыслить как заказчик"
Андрей Беляев "Мыслить как заказчик"Андрей Беляев "Мыслить как заказчик"
Андрей Беляев "Мыслить как заказчик"
 
Наталья Шпот «Магия приоритетов как ключ к личному счастью»
Наталья Шпот «Магия приоритетов как ключ к личному счастью»Наталья Шпот «Магия приоритетов как ключ к личному счастью»
Наталья Шпот «Магия приоритетов как ключ к личному счастью»
 
IT Talk smartwatches, Dmitriy Scherbina DataArt Dnepropetrovsk
IT Talk smartwatches, Dmitriy Scherbina DataArt Dnepropetrovsk IT Talk smartwatches, Dmitriy Scherbina DataArt Dnepropetrovsk
IT Talk smartwatches, Dmitriy Scherbina DataArt Dnepropetrovsk
 
Dc brochure vietv1 (1)
Dc brochure vietv1 (1)Dc brochure vietv1 (1)
Dc brochure vietv1 (1)
 
Дмитрий Паньков ( DataArt) "Business intelligence: перспективы для будущих сп...
Дмитрий Паньков ( DataArt) "Business intelligence: перспективы для будущих сп...Дмитрий Паньков ( DataArt) "Business intelligence: перспективы для будущих сп...
Дмитрий Паньков ( DataArt) "Business intelligence: перспективы для будущих сп...
 
Fiscalidad de internet
Fiscalidad de internetFiscalidad de internet
Fiscalidad de internet
 
Thriller powerpoint finished
Thriller powerpoint finishedThriller powerpoint finished
Thriller powerpoint finished
 
Makeinindia-by Rohan Marthak
Makeinindia-by Rohan MarthakMakeinindia-by Rohan Marthak
Makeinindia-by Rohan Marthak
 
«Как с помощью Google Material Design не делать ». Дмитрий Провоторов
«Как с помощью Google Material Design не делать ». Дмитрий Провоторов«Как с помощью Google Material Design не делать ». Дмитрий Провоторов
«Как с помощью Google Material Design не делать ». Дмитрий Провоторов
 

Similar to «Custom View. Делаем быстро, красиво, чисто». Илья Демидов

Разбираемся с CoordinatorLayout
Разбираемся с CoordinatorLayoutРазбираемся с CoordinatorLayout
Разбираемся с CoordinatorLayoutRambler Android
 
Introduction to KnockoutJs
Introduction to KnockoutJsIntroduction to KnockoutJs
Introduction to KnockoutJsAndrii Naidenko
 
Android Development Course in HSE lecture #3
Android Development Course in HSE lecture #3Android Development Course in HSE lecture #3
Android Development Course in HSE lecture #3Empatika
 
jQuery: быстрая разработка веб-интерфейсов на JavaScript
jQuery: быстрая разработка веб-интерфейсов на JavaScriptjQuery: быстрая разработка веб-интерфейсов на JavaScript
jQuery: быстрая разработка веб-интерфейсов на JavaScriptConstantin Kichinsky
 
Четвертое занятие курса iOS-разработки в ГУ-ВШЭ
Четвертое занятие курса iOS-разработки в ГУ-ВШЭЧетвертое занятие курса iOS-разработки в ГУ-ВШЭ
Четвертое занятие курса iOS-разработки в ГУ-ВШЭOleg Parinov
 
Быть в 10 раз эффективнее благодаря Groovy
Быть в 10 раз эффективнее благодаря GroovyБыть в 10 раз эффективнее благодаря Groovy
Быть в 10 раз эффективнее благодаря GroovyEvgeny Kompaniyets
 
Журат М. - AFramework
Журат М. - AFrameworkЖурат М. - AFramework
Журат М. - AFrameworkInnim
 
Реализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в MagentoРеализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в MagentoMagecom Ukraine
 
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации..."Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...Yandex
 
PVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибокPVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибокAndrey Karpov
 
Lviv MDDay 2014. Олександр Зозуля “Google карти для android”
Lviv MDDay 2014. Олександр Зозуля “Google карти для android”Lviv MDDay 2014. Олександр Зозуля “Google карти для android”
Lviv MDDay 2014. Олександр Зозуля “Google карти для android”Lviv Startup Club
 
Flex Component Lifecycle Overview
Flex Component Lifecycle OverviewFlex Component Lifecycle Overview
Flex Component Lifecycle OverviewConstantiner
 
Knockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-ОнлайнKnockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-ОнлайнDevDay
 
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеШкола-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеГлеб Тарасов
 
Кроссбраузерные решения в рекламной сети Яндекса
Кроссбраузерные решения в рекламной сети ЯндексаКроссбраузерные решения в рекламной сети Яндекса
Кроссбраузерные решения в рекламной сети ЯндексаMedia Gorod
 
Как писать под Android программы, а не код
Как писать под Android программы, а не кодКак писать под Android программы, а не код
Как писать под Android программы, а не код0leGG
 
Web осень 2012 лекция 9
Web осень 2012 лекция 9Web осень 2012 лекция 9
Web осень 2012 лекция 9Technopark
 
Backend: Пишем на Scala для браузера
Backend: Пишем на Scala для браузераBackend: Пишем на Scala для браузера
Backend: Пишем на Scala для браузераCodeFest
 
Write code for browsers with Scala
Write code for browsers with ScalaWrite code for browsers with Scala
Write code for browsers with ScalaGleb Kanterov
 

Similar to «Custom View. Делаем быстро, красиво, чисто». Илья Демидов (20)

Разбираемся с CoordinatorLayout
Разбираемся с CoordinatorLayoutРазбираемся с CoordinatorLayout
Разбираемся с CoordinatorLayout
 
Introduction to KnockoutJs
Introduction to KnockoutJsIntroduction to KnockoutJs
Introduction to KnockoutJs
 
Android Development Course in HSE lecture #3
Android Development Course in HSE lecture #3Android Development Course in HSE lecture #3
Android Development Course in HSE lecture #3
 
jQuery: быстрая разработка веб-интерфейсов на JavaScript
jQuery: быстрая разработка веб-интерфейсов на JavaScriptjQuery: быстрая разработка веб-интерфейсов на JavaScript
jQuery: быстрая разработка веб-интерфейсов на JavaScript
 
Четвертое занятие курса iOS-разработки в ГУ-ВШЭ
Четвертое занятие курса iOS-разработки в ГУ-ВШЭЧетвертое занятие курса iOS-разработки в ГУ-ВШЭ
Четвертое занятие курса iOS-разработки в ГУ-ВШЭ
 
Быть в 10 раз эффективнее благодаря Groovy
Быть в 10 раз эффективнее благодаря GroovyБыть в 10 раз эффективнее благодаря Groovy
Быть в 10 раз эффективнее благодаря Groovy
 
Журат М. - AFramework
Журат М. - AFrameworkЖурат М. - AFramework
Журат М. - AFramework
 
Реализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в MagentoРеализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в Magento
 
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации..."Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
 
PVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибокPVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибок
 
Lviv MDDay 2014. Олександр Зозуля “Google карти для android”
Lviv MDDay 2014. Олександр Зозуля “Google карти для android”Lviv MDDay 2014. Олександр Зозуля “Google карти для android”
Lviv MDDay 2014. Олександр Зозуля “Google карти для android”
 
Flex Component Lifecycle Overview
Flex Component Lifecycle OverviewFlex Component Lifecycle Overview
Flex Component Lifecycle Overview
 
Javascript
JavascriptJavascript
Javascript
 
Knockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-ОнлайнKnockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-Онлайн
 
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеШкола-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
 
Кроссбраузерные решения в рекламной сети Яндекса
Кроссбраузерные решения в рекламной сети ЯндексаКроссбраузерные решения в рекламной сети Яндекса
Кроссбраузерные решения в рекламной сети Яндекса
 
Как писать под Android программы, а не код
Как писать под Android программы, а не кодКак писать под Android программы, а не код
Как писать под Android программы, а не код
 
Web осень 2012 лекция 9
Web осень 2012 лекция 9Web осень 2012 лекция 9
Web осень 2012 лекция 9
 
Backend: Пишем на Scala для браузера
Backend: Пишем на Scala для браузераBackend: Пишем на Scala для браузера
Backend: Пишем на Scala для браузера
 
Write code for browsers with Scala
Write code for browsers with ScalaWrite code for browsers with Scala
Write code for browsers with Scala
 

More from DataArt

DataArt Custom Software Engineering with a Human Approach
DataArt Custom Software Engineering with a Human ApproachDataArt Custom Software Engineering with a Human Approach
DataArt Custom Software Engineering with a Human ApproachDataArt
 
DataArt Healthcare & Life Sciences
DataArt Healthcare & Life SciencesDataArt Healthcare & Life Sciences
DataArt Healthcare & Life SciencesDataArt
 
DataArt Financial Services and Capital Markets
DataArt Financial Services and Capital MarketsDataArt Financial Services and Capital Markets
DataArt Financial Services and Capital MarketsDataArt
 
About DataArt HR Partners
About DataArt HR PartnersAbout DataArt HR Partners
About DataArt HR PartnersDataArt
 
Event management в IT
Event management в ITEvent management в IT
Event management в ITDataArt
 
Digital Marketing from inside
Digital Marketing from insideDigital Marketing from inside
Digital Marketing from insideDataArt
 
What's new in Android, Igor Malytsky ( Google Post I|O Tour)
What's new in Android, Igor Malytsky ( Google Post I|O Tour)What's new in Android, Igor Malytsky ( Google Post I|O Tour)
What's new in Android, Igor Malytsky ( Google Post I|O Tour)DataArt
 
DevOps Workshop:Что бывает, когда DevOps приходит на проект
DevOps Workshop:Что бывает, когда DevOps приходит на проектDevOps Workshop:Что бывает, когда DevOps приходит на проект
DevOps Workshop:Что бывает, когда DevOps приходит на проектDataArt
 
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArt
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArtIT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArt
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArtDataArt
 
«Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...
 «Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han... «Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...
«Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...DataArt
 
Communication in QA's life
Communication in QA's lifeCommunication in QA's life
Communication in QA's lifeDataArt
 
Нельзя просто так взять и договориться, или как мы работали со сложными людьми
Нельзя просто так взять и договориться, или как мы работали со сложными людьмиНельзя просто так взять и договориться, или как мы работали со сложными людьми
Нельзя просто так взять и договориться, или как мы работали со сложными людьмиDataArt
 
Знакомьтесь, DevOps
Знакомьтесь, DevOpsЗнакомьтесь, DevOps
Знакомьтесь, DevOpsDataArt
 
DevOps in real life
DevOps in real lifeDevOps in real life
DevOps in real lifeDataArt
 
Codeless: автоматизация тестирования
Codeless: автоматизация тестированияCodeless: автоматизация тестирования
Codeless: автоматизация тестированияDataArt
 
Selenoid
SelenoidSelenoid
SelenoidDataArt
 
Selenide
SelenideSelenide
SelenideDataArt
 
A. Sirota "Building an Automation Solution based on Appium"
A. Sirota "Building an Automation Solution based on Appium"A. Sirota "Building an Automation Solution based on Appium"
A. Sirota "Building an Automation Solution based on Appium"DataArt
 
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...DataArt
 
IT talk: Как я перестал бояться и полюбил TestNG
IT talk: Как я перестал бояться и полюбил TestNGIT talk: Как я перестал бояться и полюбил TestNG
IT talk: Как я перестал бояться и полюбил TestNGDataArt
 

More from DataArt (20)

DataArt Custom Software Engineering with a Human Approach
DataArt Custom Software Engineering with a Human ApproachDataArt Custom Software Engineering with a Human Approach
DataArt Custom Software Engineering with a Human Approach
 
DataArt Healthcare & Life Sciences
DataArt Healthcare & Life SciencesDataArt Healthcare & Life Sciences
DataArt Healthcare & Life Sciences
 
DataArt Financial Services and Capital Markets
DataArt Financial Services and Capital MarketsDataArt Financial Services and Capital Markets
DataArt Financial Services and Capital Markets
 
About DataArt HR Partners
About DataArt HR PartnersAbout DataArt HR Partners
About DataArt HR Partners
 
Event management в IT
Event management в ITEvent management в IT
Event management в IT
 
Digital Marketing from inside
Digital Marketing from insideDigital Marketing from inside
Digital Marketing from inside
 
What's new in Android, Igor Malytsky ( Google Post I|O Tour)
What's new in Android, Igor Malytsky ( Google Post I|O Tour)What's new in Android, Igor Malytsky ( Google Post I|O Tour)
What's new in Android, Igor Malytsky ( Google Post I|O Tour)
 
DevOps Workshop:Что бывает, когда DevOps приходит на проект
DevOps Workshop:Что бывает, когда DevOps приходит на проектDevOps Workshop:Что бывает, когда DevOps приходит на проект
DevOps Workshop:Что бывает, когда DevOps приходит на проект
 
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArt
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArtIT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArt
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArt
 
«Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...
 «Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han... «Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...
«Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...
 
Communication in QA's life
Communication in QA's lifeCommunication in QA's life
Communication in QA's life
 
Нельзя просто так взять и договориться, или как мы работали со сложными людьми
Нельзя просто так взять и договориться, или как мы работали со сложными людьмиНельзя просто так взять и договориться, или как мы работали со сложными людьми
Нельзя просто так взять и договориться, или как мы работали со сложными людьми
 
Знакомьтесь, DevOps
Знакомьтесь, DevOpsЗнакомьтесь, DevOps
Знакомьтесь, DevOps
 
DevOps in real life
DevOps in real lifeDevOps in real life
DevOps in real life
 
Codeless: автоматизация тестирования
Codeless: автоматизация тестированияCodeless: автоматизация тестирования
Codeless: автоматизация тестирования
 
Selenoid
SelenoidSelenoid
Selenoid
 
Selenide
SelenideSelenide
Selenide
 
A. Sirota "Building an Automation Solution based on Appium"
A. Sirota "Building an Automation Solution based on Appium"A. Sirota "Building an Automation Solution based on Appium"
A. Sirota "Building an Automation Solution based on Appium"
 
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...
 
IT talk: Как я перестал бояться и полюбил TestNG
IT talk: Как я перестал бояться и полюбил TestNGIT talk: Как я перестал бояться и полюбил TestNG
IT talk: Как я перестал бояться и полюбил TestNG
 

«Custom View. Делаем быстро, красиво, чисто». Илья Демидов