Android의 제스처 인식 이해 APP의 사용자 환경 향상

터치스크린에 대한 원생 메시지는 누르기, 들어올리기, 이동하는 몇 가지가 아니다. 우리는 간단하게 원터치를 다시 불러오거나 터치탐지기 set On Touch Listener를 설정하면 처리할 수 있다.그러나 우리의 앱의 사용자 체험을 향상시키기 위해 때때로 우리는 사용자의 제스처를 식별해야 한다. 안드로이드가 우리에게 제공하는 제스처 식별 도구인Gesture Detector는 큰 도움을 줄 수 있다.기초적인 Gesture Detector의 작업 원리는 사용자가 메시지를 터치할 때 이 메시지를 Gesture Detector에 건네주어 가공하는 것이다. 우리는 탐지기를 설치하여 Gesture Detector 처리 후의 제스처를 얻을 수 있다.Gesture Detector는 두 개의 탐지기 인터페이스를 제공합니다. On Gesture Listener는 클릭 클래스 메시지를 처리하고, On Double Tap Listener는 더블 클릭 클래스 메시지를 처리합니다.OnGesture Listener의 인터페이스는 다음과 같습니다.//를 클릭하고 터치스크린을 눌렀을 때 abstract boolean onDown(Motion Event e);//들어올리고 손가락이 터치스크린을 벗어날 때 터치(길게 누르거나 굴리거나 미끄러질 때 이 동작을 터치하지 않음)abstract boolean on Single TapUp(Motion Evente);//짧게 누르면 터치스크린을 눌렀다가 잠시 후에 들어올리면 이 동작을 터치합니다. 빠르게 들어올리면 abstract void on Show Press(Motion Evente);//길게 누르고 터치스크린을 누르면 들어올리거나 움직이지 않으며 일정 시간이 지나면 abstract void onLongPress(Motion Evente);//스크롤, 터치스크린 누르고 abstract boolean onScroll 이동(Motion Event e1, Motion Event e2, float distanceX, float distanceY);//슬라이딩, 터치스크린 누르기 후 빠르게 이동하고 들어올리면 먼저 스크롤 제스처를 터치하고 슬라이딩 제스처 abstract boolean onFling(Motion Event e1, Motion Event e2, float velocity X, float velocityY)을 터치합니다.On Double TapListener의 인터페이스는 다음과 같습니다.//두 번 클릭하고 손가락이 터치스크린에서 두 번째 아래로 빠르게 눌렀을 때 abstract boolean on Double Tap(Motion Evente)을 터치합니다.//두 번 클릭한 다음 위로 올려 각각 abstract boolean onDouble Tap Event(Motion Evente);//확인을 누르면 바로 누르고 들어올리지만 두 번째 abstract boolean on Single Tap Confirmed(Motion Evente)를 연속으로 누르지 않습니다.때때로 우리는 위의 모든 제스처를 처리할 필요가 없다. 편리하게 볼 수 있다. 안드로이드는 또 다른 종류의 Simple On Gesture Listener를 제공하여 상기 인터페이스와 같은 것을 실현했다. 우리는 Simple On Gesture Listener를 계승하고 관심 있는 제스처를 다시 불러오기만 하면 된다.STEP 1: 제스처 탐지 객체를 작성합니다
 
package noodies.blog.csdn.net;
import android.content.Context;
import android.view.MotionEvent;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.widget.Toast;
public class MyGestureListener extends SimpleOnGestureListener {
private Context mContext;
MyGestureListener(Context context) {
mContext = context;
}
@Override
public boolean onDown(MotionEvent e) {
Toast.makeText(mContext, "DOWN " + e.getAction(), Toast.LENGTH_SHORT).show();
return false;
}
@Override
public void onShowPress(MotionEvent e) {
Toast.makeText(mContext, "SHOW " + e.getAction(), Toast.LENGTH_SHORT).show();
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
Toast.makeText(mContext, "SINGLE UP " + e.getAction(), Toast.LENGTH_SHORT).show();
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
Toast.makeText(mContext, "SCROLL " + e2.getAction(), Toast.LENGTH_SHORT).show();
return false;
}
@Override
public void onLongPress(MotionEvent e) {
Toast.makeText(mContext, "LONG " + e.getAction(), Toast.LENGTH_SHORT).show();
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
Toast.makeText(mContext, "FLING " + e2.getAction(), Toast.LENGTH_SHORT).show();
return false;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
Toast.makeText(mContext, "DOUBLE " + e.getAction(), Toast.LENGTH_SHORT).show();
return false;
}
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
Toast.makeText(mContext, "DOUBLE EVENT " + e.getAction(), Toast.LENGTH_SHORT).show();
return false;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
Toast.makeText(mContext, "SINGLE CONF " + e.getAction(), Toast.LENGTH_SHORT).show();
return false;
}
}
STEP 2: 제스처 인식 설정 Activity에서 제스처 인식을 설정할 수 있습니다
 
package noodies.blog.csdn.net;
import android.app.Activity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
public class GestureTestActivity extends Activity {
private GestureDetector mGestureDetector;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mGestureDetector = new GestureDetector(this, new MyGestureListener(this));
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return mGestureDetector.onTouchEvent(event);
}
}
사용자 정의View에서 제스처 인식:
 
package noodies.blog.csdn.net;
import android.content.Context;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
public class MyView extends View {
private GestureDetector mGestureDetector;
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
mGestureDetector = new GestureDetector(context, new MyGestureListener(context));
setLongClickable(true);
this.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
return mGestureDetector.onTouchEvent(event);
}
});
}
}
함정은 사용자 정의View에 대해 제스처로 두 개의 함정을 식별하면 당신의 많은 시간을 낭비할 수 있습니다.1:View는 longClickable을 true로 설정해야 합니다. 그렇지 않으면 제스처 인식이 제대로 작동하지 않고 Down, Show, Long 세 가지 제스처만 되돌려줍니다. 2:View의 onTouchListener에서 제스처 인식을 호출해야 합니다. 액티비티처럼 onTouchEvent를 다시 불러올 수 없습니다. 그렇지 않으면 같은 제스처 인식이 제대로 작동하지 않습니다. 테스트 결과 아래에는 여러 가지 동작이 되돌아오는 제스처 시퀀스가 있습니다. 수치 0은 터치스크린을 누르고 1은 위로 누르는 것을 의미합니다:down 0,single up 1, single conf 0 단축키: down 0, show 0, single up 1 긴키: down 0, show 0, long 0 더블 클릭: down 0, single up 1, double 0, down 0, double 이벤트 1 스크롤: down 0, (show 0), scrool 2...미끄럼: down 0, (show 0), scrool 2...,fling 1

좋은 웹페이지 즐겨찾기