Viewのイベント配信

4219 ワード

Viewのイベント配信は、ViewとViewグループのイベント配信に分けられます

Viewのイベント配信

  • Viewのイベント配信は主に3つの方法
  • である.
    * dispatchTouchEvent()
    * onTouchListener()
    * onTouchEvent()
    

    カスタムbutton印刷関連ロゴ
    public class MyButton extends android.support.v7.widget.AppCompatButton {
    
      private static final String TAG = "MyButton";
      public MyButton(Context context) {
          super(context);
      }
    
      public MyButton(Context context, AttributeSet attrs) {
          super(context, attrs);
      }
    
      public MyButton(Context context, AttributeSet attrs, int defStyleAttr) {
          super(context, attrs, defStyleAttr);
      }
    
      @Override
      public boolean onTouchEvent(MotionEvent event) {
          switch (event.getAction()){
              case MotionEvent.ACTION_DOWN:
                  KLog.d(TAG, "onTouchEvent: ACTION_DOWN");
                  break;
              case MotionEvent.ACTION_MOVE:
                  KLog.d(TAG, "onTouchEvent: ACTION_MOVE");
                  break;
    
              case MotionEvent.ACTION_UP:
                  KLog.d(TAG, "onTouchEvent: ACTION_UP");
                  break;
          }
          return super.onTouchEvent(event);
      }
    
      @Override
      public boolean dispatchTouchEvent(MotionEvent event) {
          switch (event.getAction()){
              case MotionEvent.ACTION_DOWN:
                  KLog.d(TAG, "dispatchTouchEvent: ACTION_DOWN");
                  break;
              case MotionEvent.ACTION_MOVE:
                  KLog.d(TAG, "dispatchTouchEvent: ACTION_MOVE");
                  break;
    
              case MotionEvent.ACTION_UP:
                  KLog.d(TAG, "dispatchTouchEvent: ACTION_UP");
                  break;
          }
          return super.dispatchTouchEvent(event);
      }
    }
    

    メインインタフェース
    public class MainActivity extends AppCompatActivity {
      private static final String TAG = "MyButton";
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          findViewById(R.id.btn).setOnTouchListener(new View.OnTouchListener() {
              @Override
              public boolean onTouch(View v, MotionEvent event) {
                  switch (event.getAction()) {
                      case MotionEvent.ACTION_DOWN:
                          KLog.d(TAG, "onTouch: ACTION_DOWN");
                          break;
                      case MotionEvent.ACTION_MOVE:
                          KLog.d(TAG, "onTouch: ACTION_MOVE");
                          break;
                      case MotionEvent.ACTION_UP:
                          KLog.d(TAG, "onTouch: ACTION_UP");
                          break;
                  }
                  return false;
              }
          });
      }
    }
    
     log:
    06-02 13:19:31.677 3119-3119/com.robert.touchevent D/MyButton: [ (MyButton.java:49)#dispatchTouchEvent ] dispatchTouchEvent: ACTION_DOWN
    06-02 13:19:31.677 3119-3119/com.robert.touchevent D/MyButton: [ (MainActivity.java:21)#onTouch ] onTouch: ACTION_DOWN
    06-02 13:19:31.678 3119-3119/com.robert.touchevent D/MyButton: [ (MyButton.java:32)#onTouchEvent ] onTouchEvent: ACTION_DOWN
    06-02 13:19:32.070 3119-3119/com.robert.touchevent D/MyButton: [ (MyButton.java:52)#dispatchTouchEvent ] dispatchTouchEvent: ACTION_MOVE
    06-02 13:19:32.070 3119-3119/com.robert.touchevent D/MyButton: [ (MainActivity.java:24)#onTouch ] onTouch: ACTION_MOVE
    06-02 13:19:32.071 3119-3119/com.robert.touchevent D/MyButton: [ (MyButton.java:35)#onTouchEvent ] onTouchEvent: ACTION_MOVE
    06-02 13:19:32.308 3119-3119/com.robert.touchevent D/MyButton: [ (MyButton.java:56)#dispatchTouchEvent ] dispatchTouchEvent: ACTION_UP
    06-02 13:19:32.309 3119-3119/com.robert.touchevent D/MyButton: [ (MainActivity.java:28)#onTouch ] onTouch: ACTION_UP
    06-02 13:19:32.309 3119-3119/com.robert.touchevent D/MyButton: [ (MyButton.java:39)#onTouchEvent ] onTouchEvent: ACTION_UP
    
    

    書き込みコードテストによると、dispatchTouchEvent()->onTouchListener()(設定されているかどうか、または現在のViewがEnableされているかどうかを判断する)->onTouchEvent();

    ViewGroupのイベント配信

  • ViewGroupのイベント配信の主な3つの方法:
  • dispatchTouchEvent()
  • onInterceptTouchEvent()
  • onTouchEvent()

  • カスタムLinearLayout印刷関連イベントのトリガー