Глава 13. Анонимные классы. Оживление виджетов Android……………………………………….. 280
Технические требования…………………………………………………………………………………………………………. 281
Объявление и инициализация объектов…………………………………………………………………………………. 281
Создание виджетов пользовательского интерфейса из Java без XML……………………………….. 281
Изучение палитры. Часть 1…………………………………………………………………………………………………….. 282
Виджет EditText………………………………………………………………………………………………………………… 283
Виджет ImageView……………………………………………………………………………………………………………. 283
Радиокнопки и группы…………………………………………………………………………………………………….. 284
Анонимные классы………………………………………………………………………………………………………………….. 285
Изучение палитры и анонимные классы. Часть 2…………………………………………………………………. 288
Switch………………………………………………………………………………………………………………………………… 288
CheckBox…………………………………………………………………………………………………………………………… 289
TextClock…………………………………………………………………………………………………………………………… 290
Использование WebView………………………………………………………………………………………………….. 290
Приложение Widget Exploration……………………………………………………………………………………………… 291
Настройка проекта Widget Exploration и его пользовательского интерфейса……………. 291
Написание кода для приложения Widget Exploration…………………………………………………… 297
Получение ссылок на все части пользовательского интерфейса……………………….. 297
Написание кода с чекбоксами……………………………………………………………………………….. 299
Написание кода с радиокнопками………………………………………………………………………… 301
Использование анонимного класса для обычной кнопки Button……………………….. 302
Написание кода для виджета Switch…………………………………………………………………….. 303
Использование WebView…………………………………………………………………………………………………………. 304
Запуск приложения Widget Exploration………………………………………………………………………………….. 304
Итоги…………………………………………………………………………………………………………………………………………. 306
Глава 14. Диалоговые окна Android…………………………………………………………………………………… 307
Технические требования…………………………………………………………………………………………………………. 307
Диалоговые окна……………………………………………………………………………………………………………………… 307
Создание проекта Dialog Demo………………………………………………………………………………………. 308
Написание кода класса DialogFragment……………………………………………………………………….. 308
Использование цепочки для конфигурации DialogFragment……………………………… 310
Использование класса DialogFragment…………………………………………………………………………. 311
Приложение Note to Self………………………………………………………………………………………………………….. 313
Применение соглашений об именах и строковых ресурсах………………………………………… 314
Получение файлов кода для приложения Note to Self………………………………………………….. 314
Завершенное приложение……………………………………………………………………………………………….. 315
Создание проекта…………………………………………………………………………………………………………….. 318
Подготовка строковых ресурсов…………………………………………………………………………………….. 318
Написание кода класса Note…………………………………………………………………………………………… 319
Реализация компоновок для диалоговых окон……………………………………………………………… 321
Написание кода диалоговых окон…………………………………………………………………………………. 325
Написание кода класса DialogNewNote……………………………………………………………….. 325
Написание кода класса DialogShowNote……………………………………………………………… 329
Удаление ненужных автосгенерированных фрагментов……………………………………. 331
Демонстрация диалоговых окон…………………………………………………………………………………….. 332
Написание кода плавающей кнопки действия…………………………………………………….. 333
Итоги…………………………………………………………………………………………………………………………………………. 336
Глава 15. Массивы, словари Map и случайные числа……………………………………………………… 337
Технические требования…………………………………………………………………………………………………………. 337
«Случайное» отступление………………………………………………………………………………………………………. 338
Обработка больших объемов данных с помощью массивов……………………………………………….. 338
Массивы — это объекты…………………………………………………………………………………………………. 340
Пример мини-приложения с простым массивом…………………………………………………………………… 341
Реализация динамического массива………………………………………………………………………………………. 342
Мини-приложение с динамическим массивом………………………………………………………………. 343
Работа с многомерными массивами………………………………………………………………………………………. 344
Мини-приложение с многомерным массивом……………………………………………………………….. 344
Исключения Array-out-of-bounds…………………………………………………………………………………….. 347
Структура данных ArrayList…………………………………………………………………………………………………… 348
Расширенный цикл for……………………………………………………………………………………………………… 349
Полиморфизм массивов и экземпляров ArrayList………………………………………………………………….. 350
Больше коллекций Java: HashMap…………………………………………………………………………………………. 351
Приложение Note to Self………………………………………………………………………………………………………….. 352
Часто задаваемые вопросы…………………………………………………………………………………………………….. 353
Итоги…………………………………………………………………………………………………………………………………………. 353
Глава 16. Адаптеры и классы Recycler……………………………………………………………………………….. 354
Технические требования…………………………………………………………………………………………………………. 354
RecyclerView и RecyclerAdapter………………………………………………………………………………………………. 354
Проблема с отображением большого количества виджетов……………………………………….. 355
Решение проблемы отображения большого количества виджетов…………………………….. 355
Практическое применение RecyclerView и RecyclerAdapter…………………………………………. 356
Настройка RecyclerView с RecyclerAdapter и заметками ArrayList……………………………… 357
Добавление RecyclerView, RecyclerAdapter и ArrayList в проект Note to Self……………………… 358
Удаление временной кнопки Show Note и добавление RecyclerView………………………………….. 358
Создание элемента списка для RecyclerView………………………………………………………………… 359
Написание кода класса RecyclerAdapter……………………………………………………………………….. 360
Написание кода конструктора NoteAdapter………………………………………………………… 364
Написание кода метода onCreateViewHolder………………………………………………………. 364
Написание метода onBindViewHolder………………………………………………………………….. 365
Написание кода метода getItemCount…………………………………………………………………… 365
Написание кода внутреннего класса ListItemHolder…………………………………………… 366
Написание кода MainActivity для использования классов RecyclerView и RecyclerAdapter 367
Добавление кода в метод onCreate……………………………………………………………………….. 367
Изменение метода addNote…………………………………………………………………………………….. 368
Написание метода showNote…………………………………………………………………………………. 368
Запуск приложения………………………………………………………………………………………………………………….. 369
Часто задаваемые вопросы…………………………………………………………………………………………………….. 370
Итоги…………………………………………………………………………………………………………………………………………. 370
Глава 17. Сохранение и совместное использование данных…………………………………………. 371
Технические требования…………………………………………………………………………………………………………. 371
«Намерения» Android………………………………………………………………………………………………………………. 372
Переключение Activity……………………………………………………………………………………………………… 372
Передача данных между активностями…………………………………………………………………………. 373
Добавление страницы настроек в Note to Self………………………………………………………………………. 374
Создание SettingsActivity…………………………………………………………………………………………………. 374
Разработка компоновки экрана настроек……………………………………………………………………… 375
Предоставление пользователю возможности переключаться на экран настроек…….. 375
Сохранение данных с помощью SharedPreferences……………………………………………………………… 377
Загрузка данных с помощью SharedPreferences…………………………………………………………………… 378
Сохранение настроек приложения Note to Self…………………………………………………………………….. 379
Написание кода класса SettingsActivity…………………………………………………………………………. 379
Написание кода класса MainActivity……………………………………………………………………………… 381
Более продвинутый способ сохранения данных………………………………………………………………….. 383
Классы JSON…………………………………………………………………………………………………………………….. 383
Исключения Java: try, catch и finally………………………………………………………………………………. 384
Резервное копирование пользовательских данных в Note to Self……………………………………….. 385
Часто задаваемые вопросы…………………………………………………………………………………………………….. 391
Итоги…………………………………………………………………………………………………………………………………………. 391
Глава 18. Локализация…………………………………………………………………………………………………………. 392
Технические требования…………………………………………………………………………………………………………. 392
Реализация поддержки испанского и немецкого языков в приложении Note to Self………….. 392
Добавление поддержки испанского языка…………………………………………………………………….. 393
Добавление поддержки немецкого языка………………………………………………………………………. 393
Добавление строковых ресурсов……………………………………………………………………………………. 394
Запуск приложения Note to Self на немецком или испанском языке…………………………………… 396
Выполнение переводов в коде Java………………………………………………………………………………… 396
Итоги…………………………………………………………………………………………………………………………………………. 399
Глава 19. Анимация и интерполяторы………………………………………………………………………………. 400
Технические требования…………………………………………………………………………………………………………. 400
Анимации в Android…………………………………………………………………………………………………………………. 400
Создание интересной анимации в XML…………………………………………………………………………. 401
Исчезновение и появление……………………………………………………………………………………… 401
Движение…………………………………………………………………………………………………………………. 401
Масштабирование, или растяжение……………………………………………………………………… 401
Контроль продолжительности………………………………………………………………………………. 402
Вращение…………………………………………………………………………………………………………………. 402
Повторение анимации…………………………………………………………………………………………….. 402
Комбинирование эффектов анимации с помощью set…………………………………………. 402
Создание анимаций и управление ими с помощью кода Java…………………………………….. 403
Дополнительные функции анимации……………………………………………………………………………… 403
Слушатели анимации…………………………………………………………………………………………….. 403
Интерполяторы анимации……………………………………………………………………………………… 404
Демонстрационное приложение анимации. Знакомство с SeekBar…………………………………….. 405
Демонстрационная анимация…………………………………………………………………………………………. 405
Написание кода XML-анимации……………………………………………………………………………………. 408
Использование Java в демонстрационном приложении анимации…………………………….. 412
Часто задаваемые вопросы…………………………………………………………………………………………………….. 420
Итоги…………………………………………………………………………………………………………………………………………. 421
Глава 20. Рисование и графика…………………………………………………………………………………………… 422
Технические требования…………………………………………………………………………………………………………. 422
Понятие о классе Canvas…………………………………………………………………………………………………………. 422
Рисование с помощью Bitmap, Canvas и ImageView……………………………………………………… 423
Canvas и Bitmap………………………………………………………………………………………………………. 423
Paint…………………………………………………………………………………………………………………………. 423
ImageView и Activity………………………………………………………………………………………………… 424
Краткий обзор Canvas, Bitmap, Paint и ImageView………………………………………………. 424
Использование класса Canvas………………………………………………………………………………………………… 425
Подготовка экземпляров необходимых классов…………………………………………………………… 425
Инициализация объектов………………………………………………………………………………………………… 425
Настройка содержимого Activity……………………………………………………………………………………. 426
Демонстрационное приложение Canvas……………………………………………………………………………….. 426
Создание нового проекта………………………………………………………………………………………………… 426
Написание кода демонстрационного приложения Canvas………………………………… 427
Инициализация Bitmap…………………………………………………………………………………………… 428
Рисование на экране……………………………………………………………………………………………….. 428
Метод Color.argb……………………………………………………………………………………………………. 429
Система координат Android……………………………………………………………………………………………………. 431
Черчение и рисование……………………………………………………………………………………………………… 431
Создание растровых изображений………………………………………………………………………………………… 432
Управление растровыми изображениями……………………………………………………………………………… 433
Что такое растровое изображение…………………………………………………………………………………. 433
Класс Matrix……………………………………………………………………………………………………………………… 433
Поворот растрового изображения в противоположное направление……………….. 434
Поворот растрового изображения вверх или вниз………………………………………………. 435
Демонстрационное приложение для работы с растровыми изображениями…………………….. 436
Добавление графики в проект…………………………………………………………………………………………. 436
Часто задаваемые вопросы…………………………………………………………………………………………………….. 440
Итоги…………………………………………………………………………………………………………………………………………. 440
Глава 21. Потоки. Разработка приложения для интерактивного рисования……………… 441
Технические требования…………………………………………………………………………………………………………. 441
Создание проекта Live Drawing………………………………………………………………………………………………. 441
Рефакторинг MainActivity в LiveDrawingActivity…………………………………………………………… 442
Блокировка игры в полноэкранном альбомном режиме………………………………………………. 442
Создание классов для нового приложения…………………………………………………………… 443
О структуре приложения Live Drawing…………………………………………………………………………… 443
Написание кода класса LiveDrawingActivity…………………………………………………………………. 444
Написание кода класса LiveDrawingView……………………………………………………………………… 447
Добавление полей класса………………………………………………………………………………………. 449
Написание кода конструктора LiveDrawingView………………………………………………… 451
Написание кода метода draw………………………………………………………………………………… 453
Добавление метода printDebuggingText……………………………………………………………….. 454
Метод draw и класс SurfaceView…………………………………………………………………………… 455
Игровой цикл……………………………………………………………………………………………………………………………. 456
Потоки………………………………………………………………………………………………………………………………………. 458
Возможные проблемы с потоками………………………………………………………………………………….. 459
Реализация игрового цикла с помощью потока……………………………………………………………………. 462
Реализация Runnable и подготовка метода run…………………………………………………………….. 462
Написание кода потока…………………………………………………………………………………………………… 463
Запуск и остановка потока……………………………………………………………………………………………… 463
Использование жизненного цикла Activity для запуска и остановки потока……………… 464
Написание кода метода run……………………………………………………………………………………………. 464
Запуск приложения………………………………………………………………………………………………………………….. 467
Итоги…………………………………………………………………………………………………………………………………………. 468
Глава 22. Системы частиц и обработка касаний экрана……………………………………………….. 469
Технические требования…………………………………………………………………………………………………………. 469
Добавление пользовательских кнопок на экран…………………………………………………………………… 470
Реализация эффекта системы частиц…………………………………………………………………………………….. 470
Написание кода класса Particle……………………………………………………………………………………… 471
Написание кода класса ParticleSystem………………………………………………………………………….. 473
Создание систем частиц в классе LiveDrawingView……………………………………………………… 478
Обработка касаний………………………………………………………………………………………………………………….. 479
Написание кода метода onTouchEvent………………………………………………………………………….. 481
Завершение создания HUD……………………………………………………………………………………………… 482
Запуск приложения………………………………………………………………………………………………………………….. 483
Profiler: инструмент профилирования Android Studio………………………………………………………….. 484
Итоги…………………………………………………………………………………………………………………………………………. 487
Глава 23. Поддержка различных версий Android, звуковые эффекты
и виджет Spinner……………………………………………………………………………………………………………………… 488
Работа с разными версиями Android………………………………………………………………………………………. 488
Определение текущей версии Android……………………………………………………………………………. 489
Класс SoundPool……………………………………………………………………………………………………………………… 489
Инициализация SoundPool новым способом…………………………………………………………………. 490
Инициализация SoundPool старым способом……………………………………………………………….. 491
Загрузка звуковых файлов в память……………………………………………………………………… 491
Воспроизведение звука…………………………………………………………………………………………… 492
Остановка звука………………………………………………………………………………………………………. 493
Звуковое демонстрационное приложение и знакомство с виджетом Spinner……………………. 493
Создание звуковых эффектов………………………………………………………………………………………….. 493
Настройка звука………………………………………………………………………………………………………………. 496
Написание кода звукового демоприложения………………………………………………………………… 498
Итоги…………………………………………………………………………………………………………………………………………. 502
Глава 24. Шаблоны проектирования, множество компоновок и фрагменты…………….. 503
Технические требования…………………………………………………………………………………………………………. 503
Паттерн model-view-controller………………………………………………………………………………………………… 504
Рекомендации по дизайну приложений для Android…………………………………………………………….. 505
Реальные приложения……………………………………………………………………………………………………………… 506
Мини-приложение для обнаружения устройств…………………………………………………………………… 508
Написание кода класса MainActivity……………………………………………………………………………… 511
Разблокировка автоповорота экрана……………………………………………………………………. 512
Запуск приложения………………………………………………………………………………………………………….. 513
Квалификаторы конфигурации………………………………………………………………………………………………. 514
Ограничение квалификаторов конфигурации……………………………………………………………….. 516
Фрагменты………………………………………………………………………………………………………………………………… 517
Фрагменты: жизненный цикл………………………………………………………………………………………….. 517
Управление фрагментами с помощью FragmentManager…………………………………………….. 517
Наше первое приложение с Fragment……………………………………………………………………………………. 519
Проверка фрагмента в реальных условиях…………………………………………………………………………… 524
Часто задаваемые вопросы…………………………………………………………………………………………………….. 525
Итоги…………………………………………………………………………………………………………………………………………. 525
Глава 25. Создание приложения простой галереи изображений…………………………………… 526
Технические требования…………………………………………………………………………………………………………. 526
Классическое свайп-меню Angry Birds…………………………………………………………………………………… 526
Создание галереи изображений (слайдера)………………………………………………………………………….. 527
Реализация компоновки…………………………………………………………………………………………………… 528
Написание кода класса PagerAdapter……………………………………………………………………………. 529
Написание кода класса MainActivity……………………………………………………………………………… 531
Запуск приложения галереи……………………………………………………………………………………………. 533
Итог…………………………………………………………………………………………………………………………………………… 533
Глава 26. Расширенный пользовательский интерфейс с Navigation Drawer и Fragment 534
Технические требования…………………………………………………………………………………………………………. 534
Знакомство с NavigationView…………………………………………………………………………………………………. 535
Простое приложение базы данных………………………………………………………………………………………… 536
Insert………………………………………………………………………………………………………………………………….. 536
Delete…………………………………………………………………………………………………………………………………. 536
Search………………………………………………………………………………………………………………………………… 537
Results………………………………………………………………………………………………………………………………… 538
Реализация проекта Age Database………………………………………………………………………………………….. 538
Изучение автоматически сгенерированного кода и ресурсов…………………………………………….. 538
Написание кода классов Fragment и их компоновок……………………………………………………. 540
Создание пустых файлов для классов и компоновок……………………………………………………. 540
Написание классов………………………………………………………………………………………………………….. 540
Разработка компоновок…………………………………………………………………………………………………… 543
Разработка content_insert.xml…………………………………………………………………………………………. 543
Разработка content_delete.xml………………………………………………………………………………………… 543
Разработка content_search.xml……………………………………………………………………………………….. 544
Разработка content_results.xml……………………………………………………………………………………….. 545
Использование классов Fragment и их компоновок……………………………………………………………… 545
Редактирование меню Navigation Drawer……………………………………………………………………… 545
Добавление держателя к основной компоновке……………………………………………………………. 546
Написание кода класса MainActivity.java……………………………………………………………………… 547
Итоги…………………………………………………………………………………………………………………………………………. 550
Глава 27. Базы данных Android…………………………………………………………………………………………… 551
Технические требования…………………………………………………………………………………………………………. 551
Базы данных…………………………………………………………………………………………………………………………….. 552
Что такое база данных?…………………………………………………………………………………………………… 552
Что такое SQL?…………………………………………………………………………………………………………………. 552
Что такое SQLite?……………………………………………………………………………………………………………… 552
Учебник по синтаксису SQL……………………………………………………………………………………………………. 553
Пример кода SQLite………………………………………………………………………………………………………….. 553
Создание таблицы………………………………………………………………………………………………….. 553
Добавление данных в базу…………………………………………………………………………………….. 554
Получение данных из базы……………………………………………………………………………………. 554
Обновление структуры базы данных……………………………………………………………………. 555
Android SQLite API…………………………………………………………………………………………………………………… 555
SQLiteOpenHelper и SQLiteDatabase………………………………………………………………………………. 555
Создание и выполнение запросов…………………………………………………………………………………… 555
Курсоры базы данных…………………………………………………………………………………………………….. 557
Написание кода класса базы данных……………………………………………………………………………………. 558
Написание кода классов Fragment для использования класса DataManager……………………. 562
Запуск приложения Age Database………………………………………………………………………………………….. 565
Итоги…………………………………………………………………………………………………………………………………………. 567
Глава 28. Краткое напутствие перед расставанием…………………………………………………………. 568
Публикация приложения…………………………………………………………………………………………………………. 568
Создайте приложение!…………………………………………………………………………………………………………….. 569
Продолжайте учиться……………………………………………………………………………………………………………… 569
Продолжайте читать……………………………………………………………………………………………………….. 569
GitHub……………………………………………………………………………………………………………………………….. 570
Stack Overflow…………………………………………………………………………………………………………………… 570
Форумы пользователей Android……………………………………………………………………………………… 572
Обучение более высокого уровня…………………………………………………………………………………… 572
Каналы связи с автором………………………………………………………………………………………………………….. 572
До свидания и спасибо!…………………………………………………………………………………………………………… 573
Предметный указатель……………………………………………………………………………………………………………… 574