그동안 객체 터치에 대한 이벤트 처리 시, 단순히 


findViewById(R.id.view1).setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
int action = motionEvent.getAction();
if(action==MotionEvent.ACTION_DOWN)
// do something...
else{
// do something...
}
return false;
}
});


위의 코드와 같이 각 객체에 대해 새로운 onTouch 함수를 오버라이드해서 처리해주어 왔었다.


하지만, 이와같이 코드를 작성하면 같은 코드가 중복될 것이고, 객체지향프로그래밍의 관점에서 효율적이지 못한 코드일 것이다.



이때, GestureDetector 클래스의 객체를 사용하면 더 효율적일 것이다.


코드 사용 예시)

public class MainActivity extends AppCompatActivity {

// GestureDetector 변수 전역선언
GestureDetector detector;

@Override
protected void onCreate(Bundle savedInstanceState) {

/* .... */


detector = new GestureDetector(this, new GestureDetector.OnGestureListener() {
@Override
public boolean onDown(MotionEvent motionEvent) {
// do something...
return true;
}
/* onShowPress(), onSingleTapUp(), onScroll(), onLongPress(), onFling() ... 등등 */

});

findViewById(R.id.view).setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {

detector.onTouchEvent(motionEvent); // detector에게 이벤트 전달, 처리요청
return true;
}
});
}


+ Recent posts