Programming/Android

안드로이드 커스텀뷰 랜덤도형출력 (CustomView, Myview, onTouchEvent)

fishersheep 2021. 9. 8. 16:37
반응형

안드로이드 커스텀뷰 랜덤도형출력 (CustomView, Myview, onTouchEvent)

화면을 터치하면 터치한 위치에 랜덤으로 사각형,원,삼각형이 나타난다.

Myview.kt

package com.cookandroid.customview01

import android.content.Context
import android.graphics.*
import android.graphics.drawable.shapes.OvalShape
import android.util.AttributeSet
import android.view.MotionEvent
import android.view.View
import kotlin.random.Random

class Myview : View {


    var rect = Rect(10, 10, 110, 110)   //사각형

    var cx = 100F   //원
    var cy = 100F
    var cr = 50F

    var tx = 100F   //삼각형
    var ty = 100F
    var tw = 100F


    constructor(context: Context) : super(context)
    constructor(context: Context, attrs: AttributeSet) : super(context, attrs)

    override fun onDraw(canvas: Canvas) {
        super.onDraw(canvas)

        val paint = Paint()
        paint.color = Color.RED
        paint.strokeWidth = 4F
        paint.style = Paint.Style.FILL_AND_STROKE
        paint.isAntiAlias = true

        var random = Random.nextInt(3) + 1  //난수생성

        if (random == 1) {  //1일경우 사각형
            canvas.drawRect(rect, paint)
        } else if (random == 2) {   //2일경후 원
            canvas.drawCircle(cx, cy, cr, paint)
        } else if (random == 3) {   //3일경우 삼각형
            var hw = tw / 2
            var path = Path()
            path.moveTo(tx, ty - hw)
            path.lineTo(tx - hw, ty + hw)
            path.lineTo(tx + hw, ty + hw)
            path.lineTo(tx, ty - hw)
            path.close()
            canvas.drawPath(path, paint)
        }


    }

    override fun onTouchEvent(event: MotionEvent): Boolean {
        if (event.action == MotionEvent.ACTION_DOWN || event.action == MotionEvent.ACTION_MOVE) {

            rect.left = event.x.toInt()     //사각형
            rect.top = event.y.toInt()
            rect.right = rect.left + 100
            rect.bottom = rect.top + 100

            cx = event.x.toFloat()      //원
            cy = event.y.toFloat()

            tx = event.x.toFloat()      //삼각형
            ty = event.y.toFloat()

            invalidate()
            return true
        }
        return super.onTouchEvent(event)
    }
}

MainActivity.kt

package com.cookandroid.customview01

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)


    }
}

결과화면

결과화면

반응형