练习-实现多指画线的view


package com.wuhongru.workman.myView

import android.content.Context
import android.graphics.Canvas
import android.graphics.Paint
import android.graphics.Path
import android.util.AttributeSet
import android.util.SparseArray
import android.view.MotionEvent
import android.view.View
import com.wuhongru.workman.dp

class TouchView3(context: Context, attrs: AttributeSet) : View(context, attrs) {
    private val mPaint = Paint(Paint.ANTI_ALIAS_FLAG)
    private val paths = SparseArray<Path>()

    init {
        mPaint.style = Paint.Style.STROKE
        mPaint.strokeWidth = 3.dp
        mPaint.strokeCap = Paint.Cap.ROUND
        mPaint.strokeJoin = Paint.Join.ROUND
    }

    override fun onDraw(canvas: Canvas) {
        super.onDraw(canvas)
        for (i in 0 until paths.size()) {
            canvas.drawPath(paths.valueAt(i),mPaint)
        }
    }

    override fun onTouchEvent(event: MotionEvent): Boolean {
        when(event.actionMasked){
            MotionEvent.ACTION_DOWN,MotionEvent.ACTION_POINTER_DOWN->{
                val index = event.actionIndex
                val pointerId = event.getPointerId(index)
                val path = Path()
                path.moveTo(event.getX(index),event.getY(index))
                paths.append(pointerId,path)
                invalidate()
            }
            MotionEvent.ACTION_POINTER_UP,MotionEvent.ACTION_UP->{
                val pointerId = event.getPointerId(event.actionIndex)
                paths.remove(pointerId)
            }
            MotionEvent.ACTION_MOVE->{
                for (i in 0 until paths.size()){
                    val pointerId = event.getPointerId(i)
                    val curPath = paths.get(pointerId)
                    curPath.lineTo(event.getX(i),event.getY(i))
                }
                invalidate()
            }
        }
        return true
    }

}

文章作者: Lao Wu
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Lao Wu !
评论
  目录