アンドロイド3)イベント処理


Concepts of Event Programming
1. Event Model
  • Hierarchyイベントモデル:元のイベント、ユーザーがアプリケーションで実行できる元のイベント
  • ex) Touch Event, Key Event
  • ActivityはonTouchEvent関数などを上書きして定義するだけで呼び出すことができます
  • Delegationイベントモデル:OOPイベントは、OOPによってイベントを再解釈して処理される(OOPプログラム自体が重要)
  • TouchEventはすべてのイベントを処理することができるが、OOPの明瞭性
  • に従って
  • 1)イベントが発生したビューオブジェクトを明確に指定
  • 2)イベントタイプを性質別に区分
  • Key Event
  • 携帯電話のボタンを押した瞬間のイベント;オリジナルイベント
  • タイプ
  • onKey Down:キーを押した瞬間のイベント
  • onKeyUp:キーを押した瞬間のイベント
  • onKeyLongPress:ロングボタンの瞬間のイベント
  • override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
            when(keyCode){
                KeyEvent.KEYCODE_0 -> Log.d("key", "0번 키가 눌렸어요")
                KeyEvent.KEYCODE_A -> Log.d("key", "A 키가 눌렸어요")
            }
            return super.onKeyDown(keyCode, event)
        }
    ユーザキー→onKeyDown関数call→パラメータを介してキーコード値を渡す→キーコード値でユーザがどのキーを押したかを知る→アクティブにする
    ※KakaoTalkなどで文字を入力する際のキーボードをSoft Keyboardといいます.アプリケーションでは、Soft Keyboardはボタンにすぎません.そのため、Key Eventは機能しません.
    ※では、Key Eventはいつ使いますか?アンドロイド携帯電話の下端にあるback、home、overviewボタン、デバイス上のpower、volume up/downボタンをシステムボタンと呼びます.これらのボタンは、アンドロイドシステムではキーイベントとみなされます.特にbackボタンの処理に用いられる.
    Touch Event
  • ユーザによるタッチスクリーンによるイベント
  • onTouchEvent()イベントコールバック関数
  • タイプ
  • ACTION DOWN:画面をタッチした瞬間のイベント
  • ACTION UP:画面上のタッチ瞬間イベント
  • ACTION MOVE:タッチスクリーンの瞬間イベント
  • override fun onTouchEvent(event: MotionEvent?): Boolean {
            when(event?.action){ //action 속성으로 이벤트 종류 확인
                MotionEvent.ACTION_DOWN -> {
                    // ...
                }
                MotionEvent.ACTION_UP -> {
                    // ...
                }
            }
            return super.onTouchEvent(event)
        }
    ユーザがアクティブ画面に触れる→onTouchEvent関数呼び出し→パラメータトリガポイントの座標値やタッチイベントの種類を渡す→パラメータを利用して多様なビジネスロジックを実現
  • イベント座標
  • x:イベントビューの座標
  • y:イベントビューの座標
  • rawX:画面上の座標
  • rawY:画面上の座標
  • override fun onTouchEvent(event: MotionEvent?): Boolean {
            when(event?.action){
                MotionEvent.ACTION_DOWN -> {
                    Log.d("location x", "Touch down event... x:${event.x}, rawX:${event.rawX}")
                }
            }
            return super.onTouchEvent(event)
        }
    Click Event
  • ユーザがビューをタッチした瞬間のアクティビティ
  • Viewクラスで宣言されたイベント.必要に応じて、チェックボックスはステータス変更イベントをリストビューのItemClickEvent
  • として再定義します.
  • ClickEventとLongClickEvent
  • button.setOnClickListener(object : View.OnClickListener {
                override fun onClick(p0: View?){
                    // ...
                }
            })
  • ビュー内のイベントは常にイベントソースとイベントHandlerオブジェクトに分割されて処理される
  • Event Source:Eventオブジェクト;ビューオブジェクト
  • Event Handler:Event処理オブジェクト、開発者作成オブジェクト
  • Event SourceはどのようにEvent Handlerを起動しますか?リスナに接続して起動します.すなわち、イベントがイベントソースで発生すると、リスナーとして登録されたイベントHandlerコードが実行される.
  • 上記のコードでは、buttonがイベントソース、リスナーパラメータ()の内部でインタフェースを実装するオブジェクトは、イベントHandlerである.
  • button.setOnClickListener { 
                // ...
            }
  • SAM技術(単一抽象方法)
  • しかし、いつもこのように記入するのは面倒ではないでしょうか.
  • したがって、Cottlin言語で提供されるSAMテクノロジーを使用して実装できます.
  • 実装インタフェースのオブジェクトをパラメータとして指定した場合、そのインタフェースの抽象関数は、関数内部の論理を括弧に記入するだけでよい.