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 } }
実行すると
画面上をタッチしたまま移動するとその軌道を青で描画し 離すと画面下のカウンターがカウントアップします