반응형
안드로이드 커스텀뷰 랜덤도형출력 (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)
}
}
결과화면
반응형
'Programming > Android' 카테고리의 다른 글
안드로이드 알림기능 관련내용 (알림,알림채널) (0) | 2021.09.14 |
---|---|
안드로이드 커스텀뷰 기초 (onDraw, Invalidate, Canvas) (0) | 2021.09.08 |
안드로이드 액션바 숨기는법 (0) | 2021.08.17 |
안드로이드 스플래시 만들기 예제 (0) | 2021.08.17 |
안드로이드 스튜디오 비디오뷰 예제 (0) | 2021.08.17 |