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.要关闭硬件加速。

相关推荐
Fate_I_C36 分钟前
Android DataBinding数据绑定表达式、双向绑定
android·kotlin·databinding
csj501 小时前
安卓基础之《(29)—消息机制与异步任务》
android
张风捷特烈1 小时前
状态管理大乱斗#02 | Bloc 源码全面评析
android·前端·flutter
untE EADO2 小时前
MySQL错误-this is incompatible with sql_mode=only_full_group_by完美解决方案
android·sql·mysql
诸神黄昏EX2 小时前
Android Google EDLA
android
常利兵2 小时前
从0到1,开启Android音视频开发之旅
android·音视频
2501_937145413 小时前
TV 影视大全:多品类聚合 稳定播放优化版
android·源码·源代码管理
followYouself3 小时前
Gradle、AGP、Plugin插件基本知识
android·gradle·plugin·agp
我命由我123453 小时前
Android 开发问题:Unresolved reference: kapt
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
黄昏晓x4 小时前
数据库 ---- 表的约束
android·数据库