Android使用setXfermode例子

Kotlin 复制代码
package com.cc.rxandroid

import android.content.Context
import android.graphics.*
import android.util.AttributeSet
import android.view.View


class MyView(c: Context, a: AttributeSet): View(c, a) {

    val paint = Paint()

    override fun onDraw(canvas: Canvas) {
        super.onDraw(canvas)
        setLayerType(LAYER_TYPE_SOFTWARE, null)

        paint.color = -0x33bc
        canvas.drawBitmap(makeDst(width, height), 0f, 0f, paint)

        paint.color = -0x995501
        paint.xfermode = PorterDuffXfermode(PorterDuff.Mode.SRC_IN)
        canvas.drawBitmap(makeSrc(width, height), 0f, 0f, paint)


        paint.xfermode = null
    }

    fun makeDst(w: Int, h: Int): Bitmap {
        val bm = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888)
        val canvas = Canvas(bm)
        val p = Paint(Paint.ANTI_ALIAS_FLAG)
        p.color = -0x33bc
        canvas.drawOval(RectF(0f, 0f, w * 3f / 4, h * 3f / 4), p)
        return bm
    }

    fun makeSrc(w: Int, h: Int): Bitmap {
        val bm = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888)
        val canvas = Canvas(bm)
        val p = Paint(Paint.ANTI_ALIAS_FLAG)
        p.color = -0x995501
        canvas.drawRect(
            (w / 3).toFloat(), (h / 3).toFloat(), (w * 19 / 20).toFloat(),
            (h * 19 / 20).toFloat(), p
        )
        return bm
    }
}

运行效果:

不使用xfermode

使用xfermode.scr_in后

官方效果示例:

有几个使用的点要注意下:

1.绘制的源图和新图必须是bitmap,才能有官方例子的效果。

2.要关闭硬件加速。

相关推荐
沐怡旸28 分钟前
【底层机制】【Android】深入理解UI体系与绘制机制
android·面试
啊森要自信30 分钟前
【GUI自动化测试】YAML 配置文件应用:从语法解析到 Python 读写
android·python·缓存·pytest·pip·dash
下位子2 小时前
『AI 编程』用 Codex 开发识字小帮手应用
android·openai·ai编程
Zender Han2 小时前
Flutter 实现人脸检测 — 使用 google_mlkit_face_detection
android·flutter·ios
君逸臣劳2 小时前
玩Android Flutter版本,通过项目了解Flutter项目快速搭建开发
android·flutter
叫我龙翔3 小时前
【MySQL】从零开始了解数据库开发 --- 基本查询
android·mysql·数据库开发
2501_916008893 小时前
iOS 26 性能分析深度指南 包含帧率、渲染、资源瓶颈与 KeyMob 协助策略
android·macos·ios·小程序·uni-app·cocoa·iphone
撩得Android一次心动5 小时前
Android adb 基础使用指南
android·adb
为java加瓦5 小时前
PHP MQTT 订阅服务:实时消息接收与数据库存储解决方案
android
怿星科技5 小时前
Android MVVM架构解析:现代开发的首选模式
android·架构