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

相关推荐
循环不息优化不止1 天前
Ktor Pipeline 机制深度解析
android
q***56381 天前
Springboot3学习(5、Druid使用及配置)
android·学习
q***64971 天前
SpringSecurity踢出指定用户
android·前端·后端
q***76661 天前
SpringSecurity 实现token 认证
android·前端·后端
Chejdj1 天前
ViewModel#onCleared的实现原理
android·源码阅读
CheungChunChiu1 天前
Android 系统中的 NTP 服务器配置与选择逻辑详解
android·运维·服务器
q***49861 天前
MySQL数据的增删改查(一)
android·javascript·mysql
aqi001 天前
FFmpeg开发笔记(九十一)基于Kotlin的Android直播开源框架RootEncoder
android·ffmpeg·kotlin·音视频·直播·流媒体
鹏多多1 天前
flutter睡眠与冥想数据可视化神器:sleep_stage_chart插件全解析
android·前端·flutter
勇气要爆发1 天前
【第五阶段-高级特性和架构】第三章:高级状态管理—GetX状态管理篇
android·架构