Композитные операции в Android Canvas

Я только начинаю с разработки Android, и я иду из мира JavaScript / HTML, поэтому сейчас изучаю возможности Android SDK.

Холст HTML 5 поддерживает составные операции (см. Здесь ).

Возможно ли это на Android Canvas? Я просмотрел API класса Canvas, но не смог найти ничего полезного. Мне нужна, по крайней мере, составная операция «source-in» или (если это невозможно) «source-atop».

Композицию обрабатывают путем рисования на Canvas с Paint , использующей PorterDuffXfermode .

 Paint p=new Paint(); p.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DARKEN)); canvas.drawBitmap(bitmap, 0, 0, p); 

См. Здесь для получения дополнительной информации. Мне также удалось переопределить onPaint чтобы мы могли применить эту композицию к элементам, которые рисуют темы.

Я раньше не занимался этими операциями, но я думаю, что есть способ сделать их с использованием формы Rect . Вы можете определить прямоугольники, чтобы отметить, какие области должны быть втянуты в холст или которые должны быть удалены из исходного изображения, а класс Rect имеет встроенные встроенные функции сравнения. Например, чтобы имитировать исходный код, вы можете использовать setIntersect(Rect boundingBoxOfSource, Rect boundingBoxOfDestination) чтобы ваш новый прямоугольник имел только пересеченную область двух изображений. Затем вы можете использовать этот прямоугольник в качестве аргумента в одной из команд рисования холста, говоря ему, чтобы взять пиксели только из исходного изображения, находящегося внутри этого прямоугольника. Затем вы управляете рисунком по оси Z порядком, в котором выполняются команды рисования.

Нашел это сам. PorterDuffXfermode реализует все эти сложные режимы.

Intereting Posts
Eclipse не может подключиться к диспетчеру активности на эмуляторе – HelloWorld не появляется Как установить меню на панель инструментов на Android Библиотека Android – Публикация нескольких вариантов в локальный репозиторий Maven с использованием Gradle Как искать файл с помощью adb.exe? Android Studio, как сделать 2 столбца LinearLayout Программно определить, выполняется ли код из потока пользовательского интерфейса или нет. Нужна таблица кодов клавиш для андроида и докладчика Выделение улицы на карте google в android Visual Studio Android Emulator не запускает приложение Используйте библиотеку android RootTools для получения разрешения android.permission.STATUS_BAR Как создать пользовательский индикатор выполнения с изображением индикатора, например whatsapp? Удалить метод из FragmentTransaction не удаляет фрагмент из контейнера Круговой индикатор выполнения Sugar ORM требует, чтобы записи сохранялись каждый раз во время модульного тестирования? Как получить дату из виджета DatePicker в Android?