所以我在android中尝试了kotlin,并想开始在视图上画一个圆圈,在那里我得到一个触摸输入。它工作正常,当我在View-Class中有onTouchEvent时,但我想把逻辑放在图形部分之外,所以我在视图类中创建了一个方法,它改变了圆的坐标并调用了invalidate() 。现在我将onTouchEvent放入MainActivity并使用新坐标调用方法。我可以通过system.out.println()看到这些方法,但是invalidate()不会调用Draw(),因此圆圈不会改变。我认为这个问题有一个简单的解决方案,但我找不到它。所以我很乐意得到一些帮助。
这是我的代码:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(GameView(this))
}
override fun onTouchEvent(event: MotionEvent?): Boolean {
GameView(this).updateCircle(event!!.x,event!!.y)
return true
}
}
MainActivity.kt
class GameView(context: Context): View(context) {
val paint : Paint
var circleX : Float
var circleY : Float
init {
paint = Paint();
paint.isFilterBitmap = true;
paint.isAntiAlias = true;
paint.color = Color.YELLOW;
circleX = 100f;
circleY = 100f;
}
override fun onDraw(canvas: Canvas?) {
System.out.println("Gets Called")
super.onDraw(canvas)
canvas?.drawColor(Color.WHITE);
canvas?.drawCircle(circleX,circleY,50f,paint)
}
fun drawGrid(height: Int,width: Int){
}
fun updateCircle(x:Float,y:Float){
circleX = x
circleY = y
invalidate()
System.out.println(circleX)
}
}
GameView.kt