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

OSCHINA-MIRROR/isrc_ohos-crop_ohos

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

Crop_ohos

Проект

Данный проект представляет собой перенесённую и доработанную версию открытого проекта AndroidCrop для HarmonyOS. Исходный проект можно отследить по тегам и адресу GitHub: https://github.com/jdamcd/android-crop.

Описание проекта

  • Название: открытый компонент для обрезки изображений.
  • Серия: адаптация сторонних компонентов для HarmonyOS.
  • Функции: перемещение и масштабирование рамки обрезки на выбранном изображении, обрезка выбранной области изображения.
  • Состояние переноса: поддерживается основная функциональность компонента.
  • Отличия в вызовах: отсутствует вызов системного фотоальбома для выбора изображения, которое нужно обрезать.
  • Версия разработки: SDK 5, DevEco Studio 2.1 beta 3.
  • Автор и сопровождающий: Чжао Боюй.
  • Контакты: isrc_hm@iscas.ac.cn.
  • Адрес документации исходного проекта: https://github.com/jdamcd/android-crop.

Программирование

Язык программирования: Java.

Инструкция по установке

Проект можно запустить напрямую в SDK 4, DevEco Studio 2.1 beta 2. Если проект не запускается, удалите файлы .gradle, .idea, build, gradle, build.gradle и создайте новый проект с учётом вашей версии. Затем скопируйте соответствующие файлы из нового проекта в корневую папку.

Руководство по использованию (можно обратиться к модулю entry в этом проекте)

Этот компонент предоставляет настраиваемую рамку обрезки, которую можно перемещать или масштабировать внутри области обрезаемого изображения. Также предоставляется Image для хранения обрезанного изображения и button для перехода на страницу. Все эти функции объединены в AbilitySlice — CropImageAbility.

Пользователь может получить доступ к этому AbilitySlice следующим образом:

Crop.of(source, destination).asSquare().start(this.getAbility(), this);

Здесь source — это int-данные, указывающие на положение обрезаемого изображения, как в примере ниже:

public static final int Media_cropped = 0x1000003;

Примечание: в настоящее время этот компонент может обрезать только изображения, которые были настроены в media-папке проекта. Для импорта изображений из других источников, например, из фотоальбомов, необходимо добавить дополнительные функции.

После перехода к AbilitySlice компонента, кнопка по умолчанию в CropImageAbility переходит к MainAbility, как показано ниже. Чтобы перейти к другим Ability или AbilitySlice, необходимо прочитать исходный код и изменить событие нажатия кнопки.

Примечание: это событие нажатия кнопки находится в файле CropImageAbility.

// Создаём операцию через Intent.OperationBuilder, указывая идентификатор устройства (пустая строка означает текущее устройство), имя пакета приложения и название Ability.
Operation operation = new Intent.OperationBuilder()
        .withDeviceId("")
        .withBundleName("com.huawei.mytestproject")
        .withAbilityName("com.huawei.mytestproject.MainAbility")
        .build();
// Устанавливаем операцию в intent.
intent.setOperation(operation);

// Переходим к способности.
startAbility(intent);

При возврате на главную страницу intent содержит два параметра: cropFlag и cropStatus. cropFlag — это логическая переменная, которая указывает, была ли обрезка успешной. cropStatus — это целочисленная переменная, указывающая состояние обрезки. Значение по умолчанию — 0, что означает, что переход ещё не произошёл, значение 1 указывает на отмену обрезки, а значение 2 указывает на успешное выполнение обрезки и наличие данных в intent. Пример использования:

if (intent.getIntParam("cropStatus", 0) == 0) {
    text.setText("欢迎使用");
} else if (intent.getIntParam("cropStatus", 0) == 1) {
    text.setText("剪裁取消");
} else if (intent.getIntParam("cropStatus", 0) == 2) {
    text.setText("剪裁成功");
}

Результат обрезки можно проверить следующим образом:

if(intent.getBooleanParam("cropFlag",false)){
    handleCrop(intent);
}
// Обработка результата обрезки
private void handleCrop(Intent result) {
    int resultImg = result.getIntParam("resultImg",0);
    if(resultImg != 0){
        PixelMap crpppp = CropUtil.getClippedPixelMap(this,resultImg).get();
        image.setPixelMap(crpppp);
    }
}

Пример использования MainAbilitySlice:

public class MainAbilitySlice extends AbilitySlice {

    // Определяем изображение
    Image image;
    // Определяем текст
    Text text;

    @Override
    public void onStart(Intent intent) {

        // Переписываем метод onstart и загружаем макет
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_MainAbility_layout);

        // Устанавливаем портретный режим по умолчанию
        setDisplayOrientation(AbilityInfo.DisplayOrientation.PORTRAIT);

        // Получаем объект изображения из компонента
        image = (Image) findComponentById(ResourceTable.Id_result_image);
        /*
        * Если cropFlag в намерении истинно
        * Обрабатываем обрезанное изображение
        * Иначе пропускаем
        */
        if(intent.getBooleanParam("cropFlag",false)){
            handleCrop(intent);
        }

        /* Пользовательский -- получаем текстовый объект из компонента
        * В зависимости от cropStatus в намерении отображаем разный текст
        * 0 означает отсутствие данных
        * 1 означает отмену обрезки
        * 2 означает успешную обрезку и наличие данных
        */
        text = (Text) findComponentById(ResourceTable.Id_text);
        if(intent.getIntParam("cropStatus",0) == 0){
            text.setText("欢迎使用");
        }else if(intent.getIntParam("cropStatus",0) == 1){
            text.setText("剪裁取消");
        }else if(intent.getIntParam("cropStatus",0) == 2){
            text.setText("剪裁成功");
        }

        // Получаем кнопку из компонента
        Button button = (Button) findComponentById(ResourceTable.Id_button);
        // Настраиваем свойства и фон кнопки
        ShapeElement background = new ShapeElement();
        background.setRgbColor(new RgbColor(0, 125, 255));
        background.setCornerRadius(25);
        button.setBackground(background);
        if (button != null) {
            // Связываем событие клика
            button.setClickedListener(new Component.ClickedListener() {
                public void onClick(Component v) {
                    /*
                    * Начинаем обрезку
                    */

...

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

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

Введение

Данный компонент предоставляет настраиваемое окно обрезки — можно перемещать и масштабировать его в пределах обрезаемого изображения. Развернуть Свернуть
Apache-2.0
Отмена

Обновления (1)

все

Участники

все

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

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