如何在kotlin中实现C语言中的函数指针

Game.kt


package com.fly.game

import android.annotation.SuppressLint
import android.app.Activity
import android.content.pm.ActivityInfo
import android.os.Bundle
import android.widget.Toast
import com.fly.graphic.DrawView
import com.fly.graphic.Renderer

class Game : Activity()
{
    lateinit var game_view : DrawView
    var renderer : Renderer = Renderer()

    @SuppressLint("SourceLockedOrientationActivity")
    override fun onCreate(savedInstanceState: Bundle?)
    {
        super.onCreate(savedInstanceState)
        requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE

        renderer.SetDisplay{
            Toast.makeText(this,"test",Toast.LENGTH_SHORT).show()
        }

        game_view = DrawView(this)
        game_view.SetRenderer(renderer)

        setContentView(game_view)
    }
}

Renderer.kt

package com.fly.graphic

class Renderer()
{
    var render : () -> Unit = {};

    init
    {

    }

    fun SetDisplay(Display: () -> Unit)
    {
        render = Display
    }

}

DrawView.kt

package com.fly.graphic

import android.content.Context
import android.graphics.Canvas
import android.view.View

open class DrawView(context : Context) : View(context)
{
    private var renderer : Renderer = Renderer()

    init
    {

    }

    override fun onDraw(canvas: Canvas?)
    {
        super.onDraw(canvas)
        renderer.render()
    }

    fun SetRenderer(r : Renderer)
    {
        renderer = r
    }
}

运行后,如下图

Screenshot_2020-03-23-18-36-38.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值