我尝试通过扩展View并覆盖onDraw和onTouchEvent方法来制作自定义视图 . 当customview不在前景时(在其他视图后面绘制线条)可以正常工作,但是当我将它带到前台时,事情变得奇怪,我无法与按钮交互 . 我的问题类似于模式锁定,但是当我检查代码时,人们手动编写按钮命中框(如果手指悬停在某些坐标事件触发器上) .
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val button = findViewById(R.id.button1)
button.setOnClickListener {
}
}
override fun onResume() {
super.onResume()
val newView = MyView(this)
frameLayout1.addView(newView)
// constraintLayout.bringToFront()
}
class MyView(context: Context)// TODO Auto-generated constructor stub
: View(context) {
private val paint = Paint()
var startX: Int = 0
var startY: Int = 0
var endX: Int = 0
var endY: Int = 0
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
paint.strokeWidth=21f
paint.color = Color.parseColor("#CD5C5C")
canvas.drawLine(startX.toFloat(),startY.toFloat(),endX.toFloat(),endY.toFloat(),paint)
}
override fun onTouchEvent(event: MotionEvent): Boolean {
when (event.action) {
MotionEvent.ACTION_DOWN -> {
startX = event.x.toInt()
startY = event.y.toInt()
endX = event.x.toInt()
endY = event.y.toInt()
invalidate() }
MotionEvent.ACTION_MOVE -> {
endX = event.x.toInt()
endY = event.y.toInt()
invalidate()
}
MotionEvent.ACTION_UP -> {
endX = event.x.toInt()
endY = event.y.toInt()
invalidate() }
}
return true
}
}