日々是好日~every day is a good day~

日常の中の非日常の備忘録

【Android Studio】onTouchEvent

Android Studio kotlinのメソッドパーツ化
今回はonTouchEventです
onTouchEventは画面を押す 離す 移動するなどの操作を行ったときに呼ばれるメソッドです
前にアップしたonDrawと組み合わせると簡単なお絵描きアプリができます

override fun onTouchEvent(event: MotionEvent?): Boolean {
        when(event.action){
            MotionEvent.ACTION_DOWN -> {   /*押した時の処理*/    }
            MotionEvent.ACTION_MOVE ->  {   /*移動した時の処理*/    }
            MotionEvent.ACTION_UP ->       {   /*離した時の処理*/    }
        }
        return true
}

使用例はこちら

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.example.modeltest.DrawView
        android:id="@+id/drawView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <TextViewは省略します />
</androidx.constraintlayout.widget.ConstraintLayout>
import android.content.Context
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.graphics.Path
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.AttributeSet
import android.view.MotionEvent
import android.view.View

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

class DrawView(context: Context?, attrs: AttributeSet?) : View(context, attrs) {
    private var path : Path = Path()//線を引く、図形を描く、グラフィック描画
    private var paint : Paint =Paint()//色,太さ,スタイル
    private var drawX = 0f
    private var drawY = 0f
    var count = 0
    var str = "0"
    override fun onDraw(canvas: Canvas?) {
        super.onDraw(canvas)
        paint.color = Color.BLUE//色を青にする
        paint.style=Paint.Style.STROKE//スタイルを線にする
        paint.strokeWidth = 10f//幅
        canvas?.drawPath(path,paint)
        paint.textSize = 100f
        canvas?.drawText(str, 500f, 2000f, paint)
    }

    override fun onTouchEvent(event: MotionEvent?): Boolean {
        //タッチした位置(x座標、y座標)
        drawX = event!!.x
        drawY = event.y

        when(event.action){
            MotionEvent.ACTION_DOWN -> path.moveTo(drawX,drawY)
            MotionEvent.ACTION_MOVE -> path.lineTo(drawX,drawY)
            MotionEvent.ACTION_UP -> { count++
                                       str = count.toString() }
        }
        invalidate()//再描画を実行
        return true
    }
}

実行すると

画面上をタッチしたまま移動するとその軌道を青で描画し 離すと画面下のカウンターがカウントアップします