Jacob
Jacob

Reputation: 23

Draw a custom view on top of a layout

I want to draw a custom view, a circle, on the screen and manipulate it. But I want to follow the object oriented paradigm; being able to add more circles and have them also interact with the user and layout. Basically, I want the activity_main to be the 'canvas' and have the circle move and interact with the layout. I am new to android graphics so I could use some help and guidance. Here is my code:

MainActivity:

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()
    }
}

Circle:

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)
        }
    }

Upvotes: 1

Views: 560

Answers (1)

Pavneet_Singh
Pavneet_Singh

Reputation: 37404

First: Get the reference to root layout e.g

R.layout.activity_main is like

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

in activity after setContentView

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

Second : either use your default view object

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)

or just add you can create a canvas in future and add it like this

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()

Upvotes: 1

Related Questions