Android 터치 이벤트 전달 도해

본 박문 은 절 차 를 설명 한다.
TouchEvent 관련 이벤트 안내
흐름 도 분해 설명
총화 와 귀납
1.TouchEvent 관련 이벤트 안내
 안 드 로 이 드 터치 이벤트 관련 이벤트
 1 dispatchTouchEvent 이 방법 은 TouchEvent 를 나 누 어 주 는 데 사 용 됩 니 다.
 2 onInterceptTouchEvent 이 방법 은 TouchEvent 를 차단 하 는 데 사 용 됩 니 다.
 3 onTouchEvent 방법 은 TouchEvent 를 처리 하 는 데 사용 된다.
비교적 특수 한 것 은 onInterceptTouchEvent 사건 입 니 다.activity 와 view 에 서 는 이 사건 이 없습니다.activity 자체 가 용기 나 캐리어 일 뿐 사건 에 대한 차단 이 존재 하지 않 습 니 다.view 자체 가 사건 의 최소 유닛 이나 가장 작은 하위 클래스 이 고 차단 할 수 있 는 하위 이벤트 가 없 기 때문에 onInterceptTouchEvent 사건 이 없습니다.dispatchTouchEvent 와 onTouchEvent 이벤트 만 있 습 니 다.
2.흐름 도 분해 설명
터치 사건 의 전체 전달 체 제 를 잘 이해 하기 위해 저 는 사건 전달 에 따라 절차 도 를 그 려 서 여러분 의 이 해 를 도 왔 습 니 다.![여기 그림 설명 써 주세요.

이 그림 은 주로 3 층,즉 activity view Group view 를 포함 하고 사건 의 전달 에 따라 단계별 로 전달 합 니 다.몇 가지 요점 이 있 습 니 다.
1.dispatchTouchEvent 가 이번 사건 을 처리 하면,

그럼 그의 집행 순 서 는 이렇다.여 기 는 view Group 의 dispatchTouchEvent 입 니 다.이번 사건 을 처 리 했 습 니 다.
2.onTouchEvent 만약 에 하위 view 의 TouchEvent 가 이번 사건 을 처리 하지 않 았 다 면 이 사건 은 순서대로 위로 전달 되 고 누군가가 처리 하 는 것 을 알 게 될 것 입 니 다.activity 까지 전 달 된 onTouchEvent 가 처리 되 지 않 으 면 이번 사건 이 끝 나 는 것 을 기본 으로 합 니 다.

핵심 코드
1. Activity

  public class MainActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

  }
  String tag = "MainActivity";

  @Override
  public boolean dispatchTouchEvent(MotionEvent event) {
    String tag1 = "dispatchTouchEvent";
    switch (event.getAction()) {
      case MotionEvent.ACTION_DOWN:
        System.out.println(tag + tag1 + "ACTION_DOWN");
        break;
      case MotionEvent.ACTION_MOVE:
        System.out.println(tag + tag1 + "ACTION_MOVE");
        break;
      case MotionEvent.ACTION_UP:
        System.out.println(tag + tag1 + "ACTION_UP");
        break;

    }
    return super.dispatchTouchEvent(event);
  }

  @Override
  public boolean onTouchEvent(MotionEvent event) {
    String tag1 = "onTouchEvent";
    switch (event.getAction()) {
      case MotionEvent.ACTION_DOWN:
        System.out.println(tag + tag1 + "ACTION_DOWN");
        break;
      case MotionEvent.ACTION_MOVE:
        System.out.println(tag + tag1 + "ACTION_MOVE");
        break;
      case MotionEvent.ACTION_UP:
        System.out.println(tag + tag1 + "ACTION_UP");
        break;

    }
    return false;
  }



}

2.viewGroup

public class MyViewGroup extends ViewGroup {



  public MyViewGroup(Context context) {
    super(context);
  }

  public MyViewGroup(Context context, AttributeSet attrs) {

    super(context, attrs);
  }
  String tag = "MyViewGroup";

  @Override
  public boolean dispatchTouchEvent(MotionEvent event) {
    String tag1 = "dispatchTouchEvent";
    switch (event.getAction()) {
      case MotionEvent.ACTION_DOWN:
        System.out.println("------>"+tag +"-->"+ tag1 + "ACTION_DOWN");
        break;
      case MotionEvent.ACTION_MOVE:
        System.out.println("------>"+tag + tag1 + "ACTION_MOVE");
        break;
      case MotionEvent.ACTION_UP:
        System.out.println("------>"+tag + tag1 + "ACTION_UP");
        break;

    }
    return super.dispatchTouchEvent(event);
  }

  @Override
  public boolean onTouchEvent(MotionEvent event) {
    String tag1 = "onTouchEvent";
    switch (event.getAction()) {
      case MotionEvent.ACTION_DOWN:
        System.out.println("------>"+tag + tag1 + "ACTION_DOWN");
        break;
      case MotionEvent.ACTION_MOVE:
        System.out.println("------>"+tag + tag1 + "ACTION_MOVE");
        break;
      case MotionEvent.ACTION_UP:
        System.out.println("------>"+tag + tag1 + "ACTION_UP");
        break;

    }
    return super.onTouchEvent(event);
  }

  @Override
  public boolean onInterceptTouchEvent(MotionEvent ev) {
    String tag1 = "onInterceptTouchEvent";
    switch (ev.getAction()) {
      case MotionEvent.ACTION_DOWN:
        System.out.println("------>"+tag + tag1 + "ACTION_DOWN");
        break;
      case MotionEvent.ACTION_MOVE:
        System.out.println("------>"+tag + tag1 + "ACTION_MOVE");
        break;
      case MotionEvent.ACTION_UP:
        System.out.println("------>"+tag + tag1 + "ACTION_UP");
        break;

    }
    return super.onInterceptTouchEvent(ev);
  }


}

3.view

public class MyButton extends Button {

  public MyButton(Context context) {
    super(context);
  }
  public MyButton(Context context, AttributeSet attrs) {

    super(context, attrs);
  }

  String tag = "MyButton";

  @Override
  public boolean dispatchTouchEvent(MotionEvent event) {
    String tag1 = "dispatchTouchEvent";
    switch (event.getAction()) {
      case MotionEvent.ACTION_DOWN:
        System.out.println("------>"+tag + tag1 + "ACTION_DOWN");
        break;
      case MotionEvent.ACTION_MOVE:
        System.out.println("------>"+tag + tag1 + "ACTION_MOVE");
        break;
      case MotionEvent.ACTION_UP:
        System.out.println("------>"+tag + tag1 + "ACTION_UP");
        break;

    }
    return super.dispatchTouchEvent(event);
  }

  @Override
  public boolean onTouchEvent(MotionEvent event) {
    String tag1 = "onTouchEvent";
    switch (event.getAction()) {
      case MotionEvent.ACTION_DOWN:
        System.out.println("------>"+tag + tag1 + "ACTION_DOWN");
        break;
      case MotionEvent.ACTION_MOVE:
        System.out.println("------>"+tag + tag1 + "ACTION_MOVE");
        break;
      case MotionEvent.ACTION_UP:
        System.out.println("------>"+tag + tag1 + "ACTION_UP");
        break;

    }
    return false;
  }
}

이상 은 일부 코드 일 뿐 모든 이벤트 가 열 려 있 습 니 다.
총화 와 귀납
이상 의 학습 을 통 해 우 리 는 사건 의 전달 체 제 를 더욱 깊이 이해 할 수 있어 야 한다.그러나 실제 개발 과정 에서 우 리 는 모두 사용 하지 않 을 수도 있다.그러나 우 리 는 그의 운영 전달 원 리 를 알 아야 한다.이렇게 특수 한 업무 수 요 를 만 났 을 때 케이스 가 생기 지 않 는 다.실제 개발 에서 우 리 는 onTouch Event 사건 을 다시 쓰기 만 하면 수 요 를 만족 시 킬 수 있다.그러나 다른 사건 을 다시 쓰 려 면 좀 더 주도면밀 하 게 고려 해 야 하고 관련 된 것 이 많 을 것 이다.
여기
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기