1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/byc4426-ImageWatcher

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

ImageWatcher

ImageWatcher — это программа для просмотра изображений, которая предоставляет более качественные услуги для пользователей, стремящихся к улучшению пользовательского опыта.

  • Программа позволяет:
    • переходить в режим просмотра изображения с помощью плавной анимации при нажатии на изображение;
    • возвращаться из режима просмотра изображения с помощью плавной анимации;
    • просматривать несколько изображений, быстро перелистывать их, увеличивать двойным нажатием, выходить из просмотра одним нажатием;
    • вращать и масштабировать изображение двумя руками;
  • особенностью программы является возможность выхода из просмотра изображения свайпом вниз.

Реализация

В модуле Gradle:

implementation 'com.byc:ImageWatcher:1.1.0'
или скачать модуль:
implementation project(':imagewatcher')

Метод 1

  • В файле макета Activity:
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- some layout here -->

    <byc.imagewatcher.ImageWatcher
        android:id="@+id/v_image_watcher"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</FrameLayout>
  • Затем в методе onCreate Activity выполнить простую инициализацию:
vImageWatcher = (ImageWatcher) findViewById(R.id.v_image_watcher);
vImageWatcher.setTranslucentStatus(!isTranslucentStatus ? Utils.calcStatusBarHeight(this) : 0);
vImageWatcher.setErrorImageRes(R.mipmap.error_picture);
vImageWatcher.setOnPictureLongPressListener(this);
vImageWatcher.setLoader(new GlideSimpleLoader());
vImageWatcher.setOnStateChangedListener(new ImageWatcher.OnStateChangedListener() {
    @Override
    public void onStateChangeUpdate(ImageWatcher imageWatcher, ImageView clicked, int position, Uri uri, float animatedValue, int actionTag) {
        Log.e("IW", "onStateChangeUpdate [" + position + "][" + uri + "][" + animatedValue + "][" + actionTag + "]");
    }

    @Override
    public void onStateChanged(ImageWatcher imageWatcher, int position, Uri uri, int actionTag) {
        if (actionTag == ImageWatcher.STATE_ENTER_DISPLAYING) {
            Toast.makeText(getApplicationContext(), "点击了图片 [" + position + "]" + uri + "", Toast.LENGTH_SHORT).show();
        } else if (actionTag == ImageWatcher.STATE_EXIT_HIDING) {
            Toast.makeText(getApplicationContext(), "退出了查看大图", Toast.LENGTH_SHORT).show();
        }
    }
});

Новый метод инициализации 2

iwHelper = ImageWatcherHelper.with(this, new GlideSimpleLoader())
.setTranslucentStatus(!isTranslucentStatus ? Utils.calcStatusBarHeight(this) : 0)
.setErrorImageRes(R.mipmap.error_picture)
.setOnPictureLongPressListener(this)
.setOnStateChangedListener(new ImageWatcher.OnStateChangedListener() {
    ...
});
``` ```
.setIndexProvider(new CustomDotIndexProvider()) // настраиваемый индикатор страницы (по умолчанию цифры), не обязательно вызывать этот API
.setLoadingUIProvider(new CustomLoadingUIProvider()); // настраиваемая загрузка UI, не обязательно вызывать этот API

Поскольку просмотр изображений обычно занимает весь экран, после получения ссылки на activity можно вызвать activity.getWindow().getDecorView(), чтобы получить корневой FrameLayout и динамически вставить ImageWatcher. Это позволяет использовать неинвазивный подход, при котором больше не нужно добавлять тег <ImageWatcher> в файл макета, что уменьшает вложенность макета.

На этом этапе все подготовительные работы завершены.

/**
 * @param i              нажатое ImageView
 * @param imageGroupList список, к которому принадлежит нажатое ImageView. При загрузке изображения заранее отображаются эскизы уже загруженных миниатюр из списка
 * @param urlList        список URL-адресов загружаемых изображений, количество должно быть больше или равно size imageGroupList. Также порядок должен соответствовать порядку imageGroupList
 */
public void show(ImageView i, SparseArray<ImageView> imageGroupList, final List<Uri> urlList) { ... }

Наконец, достаточно вызвать метод vImageWatcher.show().

// не забудьте переопределить клавишу возврата
@Override
public void onBackPressed() {
    // способ 1
    if (!vImageWatcher.handleBackPressed()) {
        super.onBackPressed();
    }
    // способ 2
    if (!iwHelper.handleBackPressed()) {
        super.onBackPressed();
    }
}

Краткое введение в инициализацию API

name description
setLoader Реализатор загрузки адреса изображения
setTranslucentStatus Высота состояния, передаётся, когда не используется прозрачная строка состояния
setErrorImageRes Вид изображения при сбое загрузки
setOnPictureLongPressListener Длительное нажатие обратного вызова
setIndexProvider Пользовательский интерфейс номера страницы
setLoadingUIProvider Настраиваемый интерфейс загрузки
setStateChangedListener Обратные вызовы при отображении и выходе из отображения

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/byc4426-ImageWatcher.git
git@api.gitlife.ru:oschina-mirror/byc4426-ImageWatcher.git
oschina-mirror
byc4426-ImageWatcher
byc4426-ImageWatcher
master