Crop_ohos
Данный проект представляет собой перенесённую и доработанную версию открытого проекта AndroidCrop для HarmonyOS. Исходный проект можно отследить по тегам и адресу GitHub: https://github.com/jdamcd/android-crop.
Язык программирования: Java.
Проект можно запустить напрямую в SDK 4, DevEco Studio 2.1 beta 2. Если проект не запускается, удалите файлы .gradle, .idea, build, gradle, build.gradle и создайте новый проект с учётом вашей версии. Затем скопируйте соответствующие файлы из нового проекта в корневую папку.
Этот компонент предоставляет настраиваемую рамку обрезки, которую можно перемещать или масштабировать внутри области обрезаемого изображения. Также предоставляется 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 )