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

OSCHINA-MIRROR/chinasoft_ohos-Doodle

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

Doodle

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

  • Название проекта: Doodle
  • Серия: адаптация и перенос третьих сторон для openharmony
  • Функции: рисование на изображении, включая отмену, масштабирование, перемещение, добавление текста, наклейки и другие функции. Это мощная, настраиваемая и расширяемая платформа для рисования и многофункциональная доска для рисования.
  • Статус переноса: основные функции завершены
  • Различия при вызове: отсутствуют
  • Версия SDK: 6
  • Версия DevEco Studio: 2.2 beta1
  • Базовая версия: Release 5.5.4

Демонстрация работы

doodle_1

doodle_01 doodle_02 doodle_03

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

Добавьте зависимость в файл build.gradle модуля

// Добавьте Maven репозиторий
repositories { 
    maven { 
        url 'https://s01.oss.sonatype.org/content/repositories/releases/' 
    }
}

// Добавьте зависимость
dependencies {
    implementation 'com.gitee.chinasoft_ohos:doodle:1.0.1'   
}

В проекте SDK 6, DevEco Studio 2.2 Beta1 можно сразу запустить Если проект не запускается, удалите файлы .gradle, .idea, build, gradle, build.gradle, создайте новый проект в соответствии с вашей версией и скопируйте соответствующие файлы нового проекта в корневую директорию

Инструкция по использованию

// Функциональные возможности

  • Кисть и форма

  • Кисть и форма Кисть может выбрать ручное рисование, мозаику, имитацию, резинку, текст, текстуру. Функция имитации похожа на ту, что используется в PS, копируя определённые части изображения. Формы могут быть выбраны из ручного рисования, стрелок, прямых линий, кругов, прямоугольников и т. д. Цвет фона кисти может быть выбран как цвет или изображение. Кисть может выбрать ручное рисование, мозаику, имитацию, резинку, текст, текстуру, где функция имитации похожа на ту, что используется в PS, копируя определенные части изображения. Формы могут быть выбраны из ручного рисования, стрелок, прямых линий, кругов, прямоугольников и т.д. Цвет фона кисти может быть выбран как цвет или изображение.

  • Отмена/Повтор Отмена/Повтор

    Каждый шаг рисования может быть отменен или повторен.

    Каждый шаг рисования может быть отменен.

  • Масштабирование, перемещение и вращение Масштабирование, перемещение и вращение

    В процессе рисования можно свободно масштабировать, перемещать и вращать изображение с помощью жестов. Также можно перемещать, вращать и масштабировать элементы рисования.

    В процессе рисования можно свободно масштабировать, перемещать и вращать изображение с помощью жестов. Можно перемещать, вращать и масштабировать элементы рисования. * Zoomer Zoomer

    Для более тонкой работы с рисунком во время процесса рисования можно настроить zoomer.

    Для более тонкой работы с рисунком, во время процесса рисования можно настроить появление zoomer.

// Usage 用法

Существует два способа использования библиотеки Doodle:

Существует два способа использования библиотеки Doodle// A. Запуск DoodleAbility напрямую (интерфейс похож на демонстрационные изображения выше). Если вам нужно настроить больше взаимодействий, пожалуйста, используйте другой метод (способ B).

Использование готового интерфейса для рисования, запуск DoodleAbility напрямую. Интерфейс запуска можно увидеть на демонстрационных изображениях выше. Если вам нужно настроить больше взаимодействий, пожалуйста, используйте другой метод (способ B).

       Intent intent = new Intent();
                intent.setUriAndType(uri, null); // Передача URI изображения для рисования
                Operation operation = new Intent.OperationBuilder()
                    .withDeviceId("")
                    .withBundleName(getBundleName())
                    .withAbilityName("com.example.doodlelib.DoodleAbility")
                    .build();
                intent.setOperation(operation);
                startAbilityForResult(intent, REQ_CODE_DOODLE);
       DoodleParams params = new DoodleParams(); // Параметры рисования
       params.mImagePath // Путь к изображению

Для получения дополнительной информации о параметрах рисования, см. DoodleParams.

Просмотреть DoodleParams для получения дополнительной информации о параметрах рисования.

// B. Рекомендуется использовать DoodleView и настраивать свой интерфейс.Рекомендуется использовать DoodleView, что позволяет легко расширять и настраивать свой интерфейс взаимодействия.```java /* Независимо от того, оптимизировать ли рисование, рекомендуется включить оптимизацию, что может улучшить скорость и производительность рисования. Примечание: После открытия, если элемент выбран для редактирования, он будет рисоваться на верхнем уровне, и не будет рисоваться на соответствующем уровне до завершения редактирования. / boolean optimizeDrawing = true; DoodleView mDoodleView = new DoodleView(this, pixelMap, optimizeDrawing, new IDoodleListener() { / Вызывается при сохранении изображения-дoodles. Вызывается при сохранении рисованного изображения. */ @Override public void onSaved(IDoodle doodle, PixelMap pixelMap, Runnable callback) { //выполняет что-то } });

            /*
             вызывается, когда view готов к рисованию, так как он уже измерен. Теперь можно установить размер, цвет, кисть, форму и т.д.
             */
            @Override
            public void onReady(IDoodle doodle, int width, int height) {
                //выполняет действия
            }
        });mTouchGestureListener = new DoodleOnTouchGestureListener(mDoodleView, new DoodleOnTouchGestureListener.ISelectionListener() {
    /*
     Вызывается, когда элемент (например, текст, текстура) выбран или отменен.
     */
    @Override
    public void onSelectedItem(IDoodle doodle, IDoodleSelectableItem selectableItem, boolean selected) {
        // Выполняет действия
    }

    /*
     Вызывается, когда вы кликаете по view для создания элемента (например, текст, текстура).
     */
    @Override
    public void onCreateSelectableItem(IDoodle doodle, float x, float y) {
        // Выполняет действия
        /*
if (mDoodleView.getPen() == DoodlePen.TEXT) {
        IDoodleSelectableItem item = new DoodleText(mDoodleView, "hello", 20 * mDoodleView.getUnitSize(), new DoodleColor(Color.RED), x, y);
        mDoodleView.addItem(item);
} else if (mDoodleView.getPen() == DoodlePen.BITMAP) {
        IDoodleSelectableItem item = new DoodleBitmap(mDoodleView, bitmap, 80 * mDoodle.getUnitSize(), x, y);
        mDoodleView.addItem(item);
}
        */
    }
});

// Создает детектор касаний, который распознает жесты прокрутки, масштабирования, одиночного нажатия и т.д.
// Создание детектора жестов, который распознает прокрутку, масштабирование, нажатие и т.д.
IDoodleTouchDetector detector = new DoodleTouchDetector(getApplicationContext(), mTouchGestureListener);
mDoodleView.setDefaultTouchDetector(detector);

// Установка параметров. Настройка параметров
mDoodleView.setPen(DoodlePen.TEXT);
mDoodleView.setShape(DoodleShape.HAND_WRITE);
mDoodleView.setColor(new DoodleColor(Color.RED));```
При отключении оптимизированного рисования вам нужно вызвать `addItem(IDoodleItem)` только при создании элемента. При включении оптимизированного рисования созданный или выбранный элемент должен вызвать `markItemToOptimizeDrawing(IDoodleItem)`, а при завершении рисования нужно вызвать `notifyItemFinishedDrawing(IDoodleItem)`. Поэтому это обычно используется в коде:

Когда оптимизация отрисовки отключена, достаточно вызвать `addItem(IDoodleItem)` при создании элемента; а когда оптимизация отрисовки включена, созданные или выбранные элементы должны вызывать `markItemToOptimizeDrawing(IDoodleItem)`, а завершение отрисовки — `notifyItemFinishedDrawing(IDoodleItem)`. Поэтому в коде обычно используется следующий подход:

```java
// при создании элемента или выборе элемента для редактирования
if (mDoodle.isOptimizeDrawing()) {
   mDoodle.markItemToOptimizeDrawing(item);
} else {
   mDoodle.addItem(item);
}
```
```...

// завершение создания или редактирования
if (mDoodle.isOptimizeDrawing()) {
   mDoodle.notifyItemFinishedDrawing(item);
}
```

Затем добавьте DoodleView в вашу разметку. Теперь вы можете начать рисовать свободно.

***Добавьте DoodleView в вашу разметку, и вы сможете начать рисовать.***

// Пример

Вот другие простые примеры, чтобы показать вам, как использовать фреймворк для рисования.

1. **[Эффект мозаики](https://gitee.com/chinasoft_ohos/Doodle/tree/master/entry/src/main/java/com/example/doodle/MosaicDemo.java)**
***[Эффект мозаики](https://gitee.com/chinasoft_ohos/Doodle/tree/master/entry/src/main/java/com/example/doodle/MosaicDemo.java)***

2. **[Масштабирование текста жестом](https://gitee.com/chinasoft_ohos/Doodle/tree/master/entry/src/main/java/com/example/doodle/ScaleGestureItemDemoAbility.java)**
***[Масштабирование текста жестом](https://gitee.com/chinasoft_ohos/Doodle/tree/master/entry/src/main/java/com/example/doodle/ScaleGestureItemDemoAbility.java)***

И так далее...

Теперь вы должны понимать, что DoodleAbility использует DoodleView для рисования. Вы также можете настроить свою разметку, как это сделано в DoodleActivity. Подробнее см. [DoodleActivity](https://gitee.com/chinasoft_ohos/Doodle/tree/master/doodlelib/src/main/java/com/example/doodlelib/DoodleAbility.java).

***Теперь вы должны знать, что DoodleAbility использует DoodleView для реализации интерактивного рисования. Вы можете настроить свой интерфейс, как это сделано в DoodleActivity. Подробнее см. [DoodleAbility](https://gitee.com/chinasoft_ohos/Doodle/tree/master/doodlelib/src/main/java/com/example/doodlelib/DoodleAbility.java).***DoodleView реализует интерфейс IDoodle.***DoodleView реализует интерфейс IDoodle.***
```java
public interface IDoodle {
...
    public float getUnitSize();
    public void setDoodleRotation(int degree);
    public void setDoodleScale(float scale, float pivotX, float pivotY);
    public void setPen(IDoodlePen pen);
    public void setShape(IDoodleShape shape);
    public void setDoodleTranslation(float transX, float transY);
    public void setSize(float paintSize);
    public void setColor(IDoodleColor color);
    public void addItem(IDoodleItem doodleItem);
    public void removeItem(IDoodleItem doodleItem);
    public void save();
    public void topItem(IDoodleItem item);
    public void bottomItem(IDoodleItem item);
    public boolean undo(int step);
...
}
```
// Схема фреймворка![structure](https://raw.githubusercontent.com/1993hzw/common/master/Doodle/structure.png)// Doodle Coordinate Дoodle координаты
![coordinate](https://raw.githubusercontent.com/1993hzw/common/master/Doodle/doodle_coordinate.png)

// Extend Расширение

Вы можете создать кастомизированный элемент, такой как [DoodlePath, DoodleText, DoodleBitmap](https://gitee.com/chinasoft_ohos/Doodle/tree/master/doodlelib/src/main/java/com/example/doodlelib), который расширяет [DoodleItemBase](https://gitee.com/chinasoft_ohos/Doodle/tree/master/doodlelib/src/main/java/com/example/doodlelib/DoodleItemBase.java) или реализует [IDoodleItem](https://gitee.com/chinasoft_ohos/Doodle/tree/master/doodlelib/src/main/java/com/example/doodlelib/core/IDoodleItem.java).

***реализовать интерфейс [IDoodleItem](https://gitee.com/chinasoft_ohos/Doodle/tree/master/doodlelib/src/main/java/com/example/doodlelib/core/IDoodleItem.java) или базовый класс [DoodleItemBase](https://gitee.com/chinasoft_ohos/Doodle/tree/master/doodlelib/src/main/java/com/example/doodlelib/DoodleItemBase.java) для создания кастомизированного элемента, такого как [DoodlePath, DoodleText, DoodleBitmap](https://gitee.com/chinasoft_ohos/Doodle/tree/master/doodlelib/src/main/java/com/example/doodlelib)***

Вы можете создать кастомизированный карандаш, такой как DoodlePen, который реализует [IDoodlePen](https://gitee.com/chinasoft_ohos/Doodle/tree/master/doodlelib/src/main/java/com/example/doodlelib/core/IDoodlePen.java).

***реализовать интерфейс [IDoodlePen](https://gitee.com/chinasoft_ohos/Doodle/tree/master/doodlelib/src/main/java/com/example/doodlelib/core/IDoodlePen.java) для создания кастомизированного карандаша, такого как DoodlePen***

Вы можете создать кастомизированный объект, такой как DoodleShape, который реализует [IDoodleShape](https://gitee.com/chinasoft_ohos/Doodle/tree/master/doodlelib/src/main/java/com/example/doodlelib/core/IDoodleShape.java).***реализовать интерфейс [IDoodleShape](https://gitee.com/chinasoft_ohos/Doodle/tree/master/doodlelib/src/main/java/com/example/doodlelib/core/IDoodleShape.java) для создания кастомизированного объекта, такого как DoodleShape***Вы можете создать кастомизированный цвет, такой как DoodleColor, который реализует [IDoodleColor](https://gitee.com/chinasoft_ohos/Doodle/tree/master/doodlelib/src/main/java/com/example/doodlelib/core/IDoodleColor.java).

***реализовать интерфейс [IDoodleColor](https://gitee.com/chinasoft_ohos/Doodle/tree/master/doodlelib/src/main/java/com/example/doodlelib/core/IDoodleColor.java) для создания кастомизированного цвета, такого как DoodleColor***

Вы можете создать кастомизированный детектор касаний, такой как [DoodleTouchDetector](https://gitee.com/chinasoft_ohos/Doodle/tree/master/doodlelib/src/main/java/com/example/doodlelib/DoodleTouchDetector.java)([GestureListener](https://gitee.com/chinasoft_ohos/Doodle/tree/master/doodlelib/src/main/java/com/example/doodlelib/DoodleOnTouchGestureListener.java)), который реализует [IDoodleTouchDetector](https://gitee.com/chinasoft_ohos/Doodle/blob/master/doodlelib/src/main/java/com/example/doodlelib/core/IDoodleTouchDetector.java).

***реализация интерфейса [IDoodleTouchDetector](https://gitee.com/chinasoft_ohos/Doodle/blob/master/doodlelib/src/main/java/com/example/doodlelib/core/IDoodleTouchDetector.java) для создания кастомизированного детектора жестов, например DoodleTouchDetector***

**Все свойства могут быть изменены в процессе выполнения с помощью соответствующих методов getter и setter.**

#### Тестовые данные

CodeCheck тестирование кода прошло без ошибок

CloudTest тестирование кода прошло без ошибок

Проверка безопасности на наличие вирусов прошла успешно

Текущая версия демонстрационного примера функционально не отличается от оригинального компонента

#### Итерации версий

- 1.0.1

#### Информация о правах и лицензиях  ```
  Лицензия MIT
  
  Copyright (c) 2018 huangziwei
  
  Указанное лицо предоставляет разрешение бесплатно любому лицу, получившему копию
  данного программного обеспечения и связанных с ним файлов документации («Программное обеспечение»),
  работать с Программным обеспечением без каких-либо ограничений, включая, но не ограничиваясь,
  права использовать, копировать, изменять, объединять, публиковать, распространять, предоставлять
  сублицензии и/или продавать копии Программного обеспечения, а также разрешать лицам,
  которым Программное обеспечение было предоставлено, делать то же самое, при условии соблюдения
  следующих условий:
  
  Вышеупомянутая информация о правах и данное разрешение должны быть включены во все
  копии или значительные части Программного обеспечения.
  
  Программное обеспечение предоставляется «как есть», без каких-либо гарантий, явных или подразумеваемых,
  включая, но не ограничиваясь, гарантии пригодности для продажи, пригодности для специального назначения
  и отсутствия нарушений. В случае возникновения каких-либо претензий, убытков или других
  ответственности, возникших из действия, ошибки или иного использования Программного обеспечения,
  авторы или владельцы прав не несут ответственности.
  ```

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

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

Введение

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

Обновления

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

Участники

все

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

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