40 lines
2.7 KiB
Markdown
40 lines
2.7 KiB
Markdown
# Proposal
|
||
|
||
## Why
|
||
|
||
В веб-просмотрщике фото можно приблизить (колесо, `Space`), а в Android-клиенте
|
||
изображения в полноэкранном просмотре открываются только во вписанном виде — в 360-панораме
|
||
зум есть, в обычных фото нет. Пользователь не может рассмотреть деталь снимка на телефоне.
|
||
|
||
## What Changes
|
||
|
||
- В полноэкранный просмотр обычных изображений добавляется зум пальцами:
|
||
- pinch увеличивает/уменьшает, панорамирование при увеличении, двойной тап
|
||
переключает вписанный вид и 100% натурального размера с якорем в точку тапа.
|
||
- Предел зума — 200% натурального размера изображения, минимум — вписанный вид
|
||
(семантика веб-просмотрщика, адаптированная под тач).
|
||
- При входе в зум догружается оригинал (`originalUrl`), другие фото сбрасываются во
|
||
вписанный вид при переходе.
|
||
- Пока изображение увеличено, горизонтальный свайп не листает альбом — жест отдан
|
||
панорамированию (как для панорамы).
|
||
- Исключения: видео и 360-панорама не затрагиваются (у панорамы зум уже есть).
|
||
|
||
## Capabilities
|
||
|
||
### New Capabilities
|
||
<!-- none -->
|
||
|
||
### Modified Capabilities
|
||
- `android-client`: требование «Просмотр медиа на весь экран» расширяется зумом
|
||
изображений — pinch, панорамирование, двойной тап, предел, догрузка оригинала,
|
||
поведение pager и сброс при смене фото.
|
||
|
||
## Impact
|
||
|
||
- `android/app/src/main/java/com/galo/android/ui/viewer/ViewerScreen.kt` — обёртка
|
||
изображения и проброс состояния зума в `ViewerContent` (блокировка pager).
|
||
- Новый zoomable-компонент изображения (ручной `pointerInput` + `graphicsLayer`),
|
||
без новых зависимостей.
|
||
- Тесты: Robolectric «свайп не листает увеличенное фото»; юнит на предел и якорь.
|
||
- Серверная часть и веб-клиент не меняются.
|