Android BitmapShader更简易的实现刮刮乐功能,Kotlin

Android BitmapShader更简易的实现刮刮乐功能,Kotlin

比这种方式 Android使用PorterDuffXfermode模式PorterDuff.Mode.SRC_OUT橡皮擦实现"刮刮乐"效果,Kotlin(2)-CSDN博客

更简单实现刮刮乐效果。

Kotlin 复制代码
import android.content.Context
import android.graphics.BitmapFactory
import android.graphics.BitmapShader
import android.graphics.Canvas
import android.graphics.Paint
import android.graphics.Path
import android.graphics.Shader
import android.util.AttributeSet
import android.view.MotionEvent
import androidx.appcompat.widget.AppCompatImageView

class MyView : AppCompatImageView {
    private var mPaint: Paint = Paint()
    private var mPath: Path = Path()
    private var mPreX = 0f
    private var mPreY = 0f
    private var mBitmapShader: BitmapShader? = null

    private val mResId = R.mipmap.p

    constructor(ctx: Context, attributeSet: AttributeSet) : super(ctx, attributeSet) {
        mPaint.style = Paint.Style.STROKE
        mPaint.strokeWidth = 50f

        val bmp = BitmapFactory.decodeResource(resources, mResId, null)
        mBitmapShader = BitmapShader(bmp, Shader.TileMode.CLAMP, Shader.TileMode.REPEAT)

        mPaint.setShader(mBitmapShader)
    }

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

        canvas.drawPath(mPath, mPaint)
    }

    override fun onTouchEvent(event: MotionEvent): Boolean {
        when (event.action) {
            MotionEvent.ACTION_DOWN -> {
                mPath.moveTo(event.x, event.y)
                mPreX = event.x
                mPreY = event.y

                return true
            }

            MotionEvent.ACTION_MOVE -> {
                val endX = (mPreX + event.x) / 2
                val endY = (mPreY + event.y) / 2
                mPath.quadTo(mPreX, mPreY, endX, endY)

                mPreX = event.x
                mPreY = event.y
            }

            MotionEvent.ACTION_UP -> {

            }
        }

        postInvalidate()

        return super.onTouchEvent(event)
    }
}

进入后首先是红色,随着手指在屏幕上划过,原图出现。

Android使用PorterDuffXfermode模式PorterDuff.Mode.SRC_OUT橡皮擦实现"刮刮乐"效果,Kotlin(2)-CSDN博客文章浏览阅读630次,点赞27次,收藏14次。Android拼接合并图片生成长图代码实现合并两张图片,以第一张图片的宽度为标准,如果被合并的第二张图片宽度和第一张不同,那么就以第一张图片的宽度为准线,对第二张图片进行缩放。Android Bitmap保存成至手机图片文件,Kotlin_android bitmap保存图片-CSDN博客。Android拼接合并图片生成长图代码实现合并两张图片,以第一张图片的宽度为标准,如果被合并的第二张图片宽度和第一张不同,那么就以第一张图片的宽度为准线,对第二张图片进行缩放。https://blog.csdn.net/zhangphil/article/details/144536192Android使用PorterDuffXfermode模式PorterDuff.Mode.SRC_OUT橡皮擦实现马赛克效果,Kotlin(3)-CSDN博客文章浏览阅读493次,点赞5次,收藏5次。Android拼接合并图片生成长图代码实现合并两张图片,以第一张图片的宽度为标准,如果被合并的第二张图片宽度和第一张不同,那么就以第一张图片的宽度为准线,对第二张图片进行缩放。Android Bitmap保存成至手机图片文件,Kotlin_android bitmap保存图片-CSDN博客。Android拼接合并图片生成长图代码实现合并两张图片,以第一张图片的宽度为标准,如果被合并的第二张图片宽度和第一张不同,那么就以第一张图片的宽度为准线,对第二张图片进行缩放。https://blog.csdn.net/zhangphil/article/details/144595380

相关推荐
阿巴斯甜2 小时前
必看4
android
Carson带你学Android2 小时前
Android 17 最后一个 Beta 发布,7 件事必须现在做
android·ai编程
ooseabiscuit2 小时前
Laravel 9.x重磅升级:PHP8新特性全解析
android
帅次2 小时前
深入 MaterialTheme:掌握 ColorScheme 与 Typography 的设计核心
android·kotlin·gradle·android jetpack·compose
阿巴斯甜2 小时前
必看2
android
重生之小比特3 小时前
【MySQL 数据库】复合查询
android·数据库·mysql
6666v63 小时前
Kotlin 密封类 (Sealed Class)
kotlin
用户86022504674723 小时前
Jetpack Activity 完整示例教程
android
simplepeng4 小时前
如何减少 89% 的重组,每个Compose开发者都需要的技巧 - derivedStateOf
android·android jetpack