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

相关推荐
十幺卜入3 分钟前
Unity3d C# 基于安卓真机调试日志抓取拓展包(Android Logcat)
android·c#·unity 安卓调试·unity 安卓模拟·unity排查问题
frontend_frank12 分钟前
脱离 Electron autoUpdater:uni-app跨端更新:Windows+Android统一实现方案
android·前端·javascript·electron·uni-app
薛晓刚39 分钟前
MySQL的replace使用分析
android·adb
DengDongQi1 小时前
Jetpack Compose 滚轮选择器
android
stevenzqzq1 小时前
Android Studio Logcat 基础认知
android·ide·android studio·日志
代码不停1 小时前
MySQL事务
android·数据库·mysql
朝花不迟暮1 小时前
使用Android Studio生成apk,卡在Running Gradle task ‘assembleDebug...解决方法
android·ide·android studio
yngsqq2 小时前
使用VS(.NET MAUI)开发第一个安卓APP
android·.net
Android-Flutter2 小时前
android compose LazyVerticalGrid上下滚动的网格布局 使用
android·kotlin
Android-Flutter2 小时前
android compose LazyHorizontalGrid水平滚动的网格布局 使用
android·kotlin