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 사건 을 다시 쓰기 만 하면 수 요 를 만족 시 킬 수 있다.그러나 다른 사건 을 다시 쓰 려 면 좀 더 주도면밀 하 게 고려 해 야 하고 관련 된 것 이 많 을 것 이다.
여기
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.