안 드 로 이 드 제스처 조작 식별
14367 단어 android
우선, 안 드 로 이 드 시스템 에 서 는 제스처 상호작용 이 다음 과 같은 순서 로 실 행 됩 니 다.1. 접촉 스크린 에 접촉 하 는 순간 모 션 이벤트 이벤트 가 발생 합 니 다.2. 이 사건 은 OnTouch Listener 에 의 해 감청 되 었 고 onTouch () 방법 에서 이 MotionEvent 대상 을 얻 었 습 니 다.3. Gesture Detector (제스처 인식 기) 를 통 해 MotionEvent 대상 을 OnGesture Listener 로 전송 합 니 다.4. OnGesture Listener 는 이 대상 을 얻 고 해당 대상 이 봉 인 된 정 보 를 듣 고 적당 한 피드백 을 한다.이 순 서 는 제스처 상호작용 의 원리 라 고 할 수 있 습 니 다. 모 션 이벤트, Gesture Detector, OnGesture Listener 에 대해 알 아 보 겠 습 니 다.MotionEvent: 제스처, 터치 펜, 궤적 구 등 을 봉인 하 는 동작 이벤트 입 니 다.그 내부 에는 두 개의 중요 한 속성 X 와 Y 가 봉인 되 어 있 는데 이 두 속성 은 각각 가로축 과 세로 축의 좌 표를 기록 하 는 데 사용 된다.Gesture Detector: 각종 제스처 를 식별 합 니 다.OnGesture Listener: 이것 은 제스처 상호작용 의 감청 인터페이스 로 여러 가지 추상 적 인 방법 을 제공 하고 Gesture Detector 의 제스처 식별 결과 에 따라 대응 하 는 방법 을 호출 합 니 다.다음은 제 가 그림 을 전환 하 는 코드 예 시 를 통 해 제스처 상호작용 의 실현 을 보 여 드 리 고 여러분 들 이 위의 집행 순서 와 각 제스처 동작의 구분 에 대해 더욱 깊 은 이해 와 기억 을 가지 도록 하 겠 습 니 다.우선, ImageView 만 있 는 레이아웃 파일 인 main. xml 을 제공 합 니 다.
1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:orientation="vertical"
4 android:layout_width="fill_parent"
5 android:layout_height="fill_parent">
6
7 <ImageView android:id="@+id/image"
8 android:layout_width="fill_parent"
9 android:layout_height="fill_parent"
10 android:layout_gravity="center"/>
11 </LinearLayout>
그리고 우리 의 Activity 를 완성 합 니 다. 터치 스크린 의 터치 이벤트 와 제스처 시간 을 감청 해 야 하기 때문에 이 Activity 는 OnTouch Listener 와 OnGesture Listener 두 개의 인 터 페 이 스 를 실현 하고 그 중의 방법 을 다시 써 야 합 니 다.구체 적 인 코드 는 다음 과 같다.
1
2 // GestureDetector waiyuwu.blogcn.com
3 private GestureDetector detector = new GestureDetector(this);
4 // ,
5 int[] girls = new int[]{R.drawable.girl1, R.drawable.girl2, R.drawable.girl3};
6 // ,
7 private int index;
8 private ImageView image;
9
10 @Override
11 public void onCreate(Bundle savedInstanceState) {
12 super.onCreate(savedInstanceState);
13 setContentView(R.layout.main);
14 image = (ImageView)findViewById(R.id.image);
15 // girl
16 image.setImageResource(girls[index]);
17 // ImageView
18 image.setOnTouchListener(this);
19 // , , 。
20 image.setLongClickable(true);
21 detector.setIsLongpressEnabled(true);
22 }//
23 public void goNext(){
24 index++;
25 index = Math.abs(index % girls.length);
26 image.setImageResource(girls[index]);
27 }
28
29 // OnTouchListener onTouch
30 // , ( , ) 。
31 @Override
32 public boolean onTouch(View v, MotionEvent event) {
33 detector.onTouchEvent(event);
34 return true;
35 }
36
37 //
38 @Override
39 public boolean onDown(MotionEvent e) {
40 return false;
41 }
42
43 //
44 @Override
45 public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
46 float velocityY) {
47 //velocityX ,
48 if(velocityX < 0){
49 goNext();
50 }else if(velocityX > 0){
51 goPrevious();
52 }
53 return false;
54 }
55
56 //
57 public void goPrevious(){
58 index--;
59 index = Math.abs(index % girls.length);
60 image.setImageResource(girls[index]);
61 }
62
63 //
64 @Override
65 public void onLongPress(MotionEvent e) {
66 }
67
68 //
69 @Override
70 public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
71 float distanceY) {
72 return false;
73 }
74
75 //
76 @Override
77 public void onShowPress(MotionEvent e) {
78 }
79
80 //
81 @Override
82 public boolean onSingleTapUp(MotionEvent e) {
83 return false;
84 }
85 }
안 드 로 이 드 를 처음 배 웠 을 때 부터 구 글 의 문서 가 별로 라 고 생각 했 고 제스처 를 연구 할 때 구 글 의 문서 가 너무 못 쓴 것 같 았 다.많은 상수, 속성, 방법 이 설명 조차 없다.설명 이 없 으 면 되 지만 OnGesture Listener 에 서 는 손짓 이 이렇게 많 습 니 다. 설명 이 하나 도 없습니다. 끊임없이 시도 하기 전에 누가 onLongPress 와 onShowPress, onScroll 과 onFling 의 관계 와 차 이 를 알 수 있 습 니까?구 글 은 문서 에 큰 수술 을 해 야 합 니 다.다행히 나 는 끊임없이 반복 되 는 시 도 를 거 쳤 다.개인의 관점 에서 이 몇 가지 손짓 동작 에 대해 정 의 를 내 렸 다.
이런 정 의 를 제외 하고 저 는 경험 이 라 고 할 수 있 는 경험 을 정리 하 였 습 니 다. 여기 서 여러분 과 공유 하 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.