android - 在布局之上绘制自定义 View

标签 android kotlin

我想在屏幕上绘制一个自定义 View ,一个圆圈并对其进行操作。但是我想遵循面向对象的范例;能够添加更多圈子并让它们也与用户和布局进行交互。基本上,我希望 activity_main 成为“ Canvas ”并让圆圈移动并与布局交互。我是 android 图形的新手,所以我可以使用一些帮助和指导。这是我的代码:

主要 Activity :

package com.example.canvasbounds

import android.app.Activity
import android.os.Bundle

class MainActivity : Activity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val circle= Circle(400f,600f, this)
        circle.invalidate()
    }
}

圈子:

package com.example.canvasbounds

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

    class Circle(x: Float, y: Float, context: Context) : View(context) {
        val paint = Paint().apply {
            color = Color.BLUE
            style = Paint.Style.STROKE
            strokeWidth = 8f
        }
        override fun onDraw(canvas: Canvas?) {
            canvas?.drawCircle(x,y,100f,paint)
        }
    }

最佳答案

首先:获取对根布局的引用,例如

R.layout.activity_main 就像

<.... ConstraintLayout
    android:id="+@id/container"
    ...>

setContentView 之后的 Activity 中

val container : ConstraintLayout = findViewById(R.id.container)

第二:要么使用你的默认 View 对象

setContentView(R.layout.activity_main)
val container : ConstraintLayout = findViewById(R.id.container)
val circle= Circle(400f,600f, this)
circle.invalidate()
circle.layoutpramas = LayoutParams(25, 25) // for placement on screen,
container.addView(circle)

或者只是添加你可以在未来创建一个 Canvas 并像这样添加它

setContentView(R.layout.activity_main)
val container : ConstraintLayout = findViewById(R.id.container)
val circle= Circle(400f,600f, this)
circle.invalidate()
circle.layoutpramas = LayoutParams(25, 25) // for placement on screen, different for different layout
container.addView(circle)
val canvas = Canvas()
canvas.drawColor(Color.RED);
circle.draw(canvas)
circle.invalidate()

关于android - 在布局之上绘制自定义 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51777766/

相关文章:

javascript - Jquery 阻止设备键盘重新调整浏览器内容的大小

android - 使用 SD 卡中的图像填充 ListView (不是列表中一定数量的项目)

android - 在 Kotlin Android 中向 Recyclerview 添加数据

android - 在 Kotlin 中编写具有特征的 Android 测试时出现 java.lang.VerifyError

arrays - 如何在Kotlin中将多维数组转换为多维列表?

java - 许多第三方库无法与 android studio bumblebee 更新一起使用

android - 以编程方式验证 Android odex 文件

Android:GCM SENDER_ID 是否应该保密?

android - 尝试授权 Health Kit 时应用卡住

android - 检测应用程序正在 Lollipop 设备中卸载