自定义view
package com.wuhongru.workman.myView
import android.content.Context
import android.graphics.Canvas
import android.graphics.Paint
import android.util.AttributeSet
import android.view.MotionEvent
import android.view.View
import com.wuhongru.workman.R
import com.wuhongru.workman.dp
import com.wuhongru.workman.getReplacement
class TouchView2(context: Context, attrs: AttributeSet) : View(context, attrs) {
private val mPaint = Paint(Paint.ANTI_ALIAS_FLAG)
private val mBitmap = getReplacement(resources,300.dp.toInt(), R.drawable.ic_toma)
private var originalOffsetX = 0f
private var originalOffsetY = 0f
private var mTrackingPointerId = 0
private var offsetX = 0f
private var offsetY = 0f
private var downX = 0f
private var downY = 0f
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
canvas.drawBitmap(mBitmap,offsetX,offsetY,mPaint)
}
override fun onTouchEvent(event: MotionEvent): Boolean {
when(event.actionMasked){
MotionEvent.ACTION_DOWN->{
mTrackingPointerId = event.getPointerId(0)
downX = event.x
downY = event.y
}
MotionEvent.ACTION_POINTER_DOWN->{
val actionIndex = event.actionIndex
mTrackingPointerId = event.getPointerId(actionIndex)
downX = event.getX(actionIndex)
downY = event.getY(actionIndex)
originalOffsetX = offsetX
originalOffsetY = offsetY
}
MotionEvent.ACTION_POINTER_UP->{
val actionIndex = event.actionIndex
val pointerId = event.getPointerId(actionIndex)
if (pointerId == mTrackingPointerId){
val newIndex = if (actionIndex == event.pointerCount-1) {
event.pointerCount - 2
}else{
event.pointerCount - 1
}
mTrackingPointerId = event.getPointerId(newIndex)
downX = event.getX(newIndex)
downY = event.getY(newIndex)
originalOffsetX = offsetX
originalOffsetY = offsetY
}
}
MotionEvent.ACTION_MOVE->{
val index = event.findPointerIndex(mTrackingPointerId)
offsetX = event.getX(index) - downX + originalOffsetX
offsetY = event.getY(index) - downY + originalOffsetY
invalidate()
}
}
return true
}
}