이 글은 유데미 강의 Android 12 및 Kotlin 개발 완전 정복을 참고하여 작성하였습니다.
작성자 : 송가현
개발환경은 Windows, Android Studio입니다.
키즈 드로잉 앱 114 부터 119까지의 내용입니다.
1. 키즈 드로잉 앱 세팅하기
화면에 무언가를 그릴 수 있도록 하는 파트입니다.
1) manifests 파일로 가서 orientation을 수정해 앱의 방향을 고정한다.
<activity android:name=".MainActivity"
android:screenOrientation="portrait"
>
화면방향을 세로 모드로 설정한 것임
강의에서는 세로 모드로 설정했는데, 가로 모드로 설정하고자 할 때는 어떻게 해야할지 궁금해 찾아보았음.
android:screenOrientation="landscape"
2) 새로운 코틀린 클래스를 만들고 Drawing View 라는 클래스
: 이 class는 뷰로 사용한다.
: Activity에 포함된 AppCompatActivity에 포함된 기능을 나중에 계속 활용할 수 있기 때문이다.
import android.util.AttributeSet
import android.view.View
import android.graphics.*
class DrawingView(context: Context, attrs:AttributeSet): View(context, attrs){
private var mDrawPath: customPath?=null
private var mCanvasBitmap: Bitmap?=null
private var mDrawPaint: Paint?=null
private var mCanvasPaint: Paint?= null
private var mBrushSize: Float = 0.toFloat()
private var color= Color.BLACK
private var canvas" Canvas?=null
init{
setupDrawing()
}
private fin setUpDrawing(){
mDrawPaint=Paint()
mDrawPath= CustomPath(color, mBrushSize)
mDrawPaint!!.color=color
mDrawPaint!!.style=Paint.Style.STROKE
mDrawPaint!!.strokeJoin=Paint.Join.ROUND
mDrawPaint!!.strokeCap=Paint.Cap.ROUND
mCanvasPaint = Paint(Paint.DITHER_FLAG)
mBrushSize=20.toFloat()
}
override fun onSizeChanged(w:Int, h:Int, oldw:Int, oldh: Int){
super.onSizeChanged(w,h,oldw, oldh)
mCanvasBitmap = Bitmap.createBitmap(w,h, Bitmap.Config.ARGB_8888)
canvas = Canvas(mCanvasBitmap!!)
}
override fun onDraw(canvas: Canvas?){
super.onDraw(canvas)
mCanvasBitmap!!.let {
canvas.drawBitmap(it, 0f, 0f, mCanvasPaint)
}
for (p in mPaths) {
mDrawPaint?.strokeWidth = p.brushThickness
mDrawPaint?.color = p.color
canvas.drawPath(p, mDrawPaint!!)
}
if (!mDrawPath!!.isEmpty) {
mDrawPaint?.strokeWidth = mDrawPath!!.brushThickness
mDrawPaint?.color = mDrawPath!!.color
canvas.drawPath(mDrawPath!!, mDrawPaint!!)
}
}
2. 화면에 선 계속 그리게 하기
배열에 선을 담아내는 원리로 그린다.
override fun onTouchEvent(event: MotionEvent): Boolean {
val touchX = event.x
val touchY = event.y
when (event.action) {
MotionEvent.ACTION_DOWN -> {
mDrawPath?.color = color
mDrawPath?.brushThickness = mBrushSize
mDrawPath?.reset()
mDrawPath?.moveTo(
touchX,
touchY
)
}
MotionEvent.ACTION_MOVE -> {
mDrawPath?.lineTo(
touchX,
touchY
)
}
MotionEvent.ACTION_UP -> {
mPaths.add(mDrawPath!!) //Add when to stroke is drawn to canvas and added in the path arraylist
mDrawPath = CustomPath(color, mBrushSize)
}
else -> return false
}
invalidate()
return true
}
3. 캔버스 주변에 작은 보더 추가하기
fun setSizeForBrush(newSize: Float) {
mBrushSize = TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
newSize,
resources.displayMetrics
)
mDrawPaint?.strokeWidth = mBrushSize
}
fun setColor(newColor: String) {
color = Color.parseColor(newColor)
mDrawPaint?.color = color
}
'GDSC HUFS 4기 > Kotlin Team #3' 카테고리의 다른 글
[3팀] Android 12 : 키즈 드로잉 앱 (2) (0) | 2022.11.16 |
---|---|
[3팀] 멤버변수, 세터/게터, 데이터 클래스, 상속 (0) | 2022.11.16 |
[3팀] Android-12-Kotlin : 퀴즈 앱 안드로이드 (0) | 2022.11.11 |
[3팀] 퀴즈 앱 안드로이드 12 - 질문모델생성과 UI모델 연결 (0) | 2022.11.05 |
[3팀] Android-12-Kotlin : 계산기 - XML사용법과 UI생성법 배우기(선형레이아웃) (0) | 2022.11.04 |