如何获取svg图标中的路径 (漫反射图标效果实现)

如何获取一个 SVG 图标中的路径Path

效果图:

Step 1 - 引入 svgknife.aar

链接: https://pan.baidu.com/s/1s-Dr_5zmoho5Rwy4txzbaA 提取码: 9669 复制这段内容后打开百度网盘手机App,操作更方便哦

Step 2 - 自定义个View画解析出来的Path

kotlin 复制代码
import android.content.Context
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.util.AttributeSet
import android.view.View
import androidx.annotation.RawRes
import com.looper.android.svgknife.SvgKnife.SvgPath

class BloomImageView @JvmOverloads constructor(
    context: Context,
    attributeSet: AttributeSet? = null
) : View(context, attributeSet) {

    private val paint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
        style = Paint.Style.STROKE
        color = Color.RED
        strokeWidth = 4f
        // 核心是设置一个 ShadowLayer
        setShadowLayer(10f, 0f, 0f, Color.RED)
    }

    private val svgKnife = SvgKnife(paint)

    private var bloomIconPaths = mutableListOf<SvgPath>()

    fun setBloomIcon(@RawRes rawRes: Int) {
        bloomIconPaths.clear()
        svgKnife.load(context, rawRes)
        invalidate()
    }

    override fun onDraw(canvas: Canvas) {
        super.onDraw(canvas)

        if (bloomIconPaths.isEmpty()) {
            bloomIconPaths.addAll(svgKnife.getPathsForViewport(width, height))
        }

        bloomIconPaths.forEach {
            canvas.drawPath(it.path, paint)
        }
    }
}
相关推荐
androidwork6 分钟前
Fragment事务commit与commitNow区别
android·java·kotlin
每次的天空1 小时前
Android第十二次面试GetX库渲染机制
android·面试·职场和发展
Kapaseker1 小时前
Kotlin 守卫——更加强大的 when 表达式
android·kotlin
逍遥101 小时前
MacOS下Qt+qml+Android开发系列:2、切换页面
android·qt·trae
李斯维2 小时前
循序渐进 Android Binder(一):IPC 基本概念和 AIDL 跨进程通信的简单实例
android·java·android studio
奋飞安全2 小时前
程序员跑路了,李老板要求把App换个图标和名称
android·apk·逆向
汤姆yu2 小时前
基于Android的拼车系统的设计与实现
android·拼车系统
aningxiaoxixi2 小时前
Android 音频系统中 Ringtone 和 SoundPool
android
珹洺2 小时前
数据库系统概论(十五)详细讲解数据库视图
android·java·数据库·sql
非凡ghost3 小时前
ChatOn:智能AI聊天助手,开启高效互动新时代
android·人工智能·智能手机·生活·软件需求