안드로이드 개발 질문/답변
(글 수 45,052)
먼저 그냥가자님 답변해주셔서 감사드립니다.
아래와 같이 두가지 방식을 제안해 주셨는데요.
테스트를 하던 중에 궁금한게 더 생겨서요.
1. 제스쳐 사용
- onTouchEvent()를 오버라이드해서 제스쳐(onFling()사용)를 인식을 하는데요.
리스트에서 상/하 스크롤 이벤트가 먹히질 않습니다.
2. 커스텀리스트뷰에서 dispatchTouchEvent() 사용
- 이경우는 1번처럼 리스트 상/하 스크롤이 먹지 않는 문제는 해결되지만
처음 down좌표와 마지막 up좌표를 얻을 수 없어서 좌우스크롤판단을 내릴수가 없습니다.
어렵네요~~알려줘도 못하는 바보가 된 느낌입니다.
해결을 봤으면 좋겠는데 쉽지않네요~
다시한번 조언을 주시면 너무너무너무 고마울거 같아여~~
1. 제스쳐 사용 소스
private GestureDetector mGestures = null;
mGestures = new GestureDetector(new GestureDetector.SimpleOnGestureListener(){
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
// TODO Auto-generated method stub
System.out.println(">>>>>>>>>>>>>>>>>> onFling()!! <<<<<<<<<<<<<<<<");
return super.onFling(e1, e2, velocityX, velocityY);
}
});
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
if(mGestures != null){
System.out.println(">>>>>>>>>>>>>>>>>> mGesture True !! <<<<<<<<<<<<<<<<");
return mGestures.onTouchEvent(event);
}else{
System.out.println(">>>>>>>>>>>>>>>>>> mGesture False !! <<<<<<<<<<<<<<<<");
return super.onTouchEvent(event);
}
}
==================================================================================
2. dispatchTouchEvent() 사용 소스
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
System.out.println(">>>>>>>>>>>>>>>> dispatchTouchEvent <<<<<<<<<<<<<<<< ");
if(mGestures != null){
System.out.println(">>>>>>>>>>>>>>>>>> mGesture True !! <<<<<<<<<<<<<<<<");
return mGestures.onTouchEvent(event);
}else{
System.out.println(">>>>>>>>>>>>>>>>>> mGesture False !! <<<<<<<<<<<<<<<<");
return super.dispatchTouchEvent(event);
}
2010.10.08 17:36:41
그냥가자님 감사드립니다. ^^
저는 ViewFlipper를 이용하여 뷰전환이 되도록 하였구요~
이 뷰들을 전환을 드래그를 통해 하였을 때 ACTION_DOWN, ACTION_UP의 좌표값을 받아서 뷰전환을 하였습니다.
저는 ViewFlipper를 이용하여 뷰전환이 되도록 하였구요~
이 뷰들을 전환을 드래그를 통해 하였을 때 ACTION_DOWN, ACTION_UP의 좌표값을 받아서 뷰전환을 하였습니다.
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
switch(event.getAction()){
// 다운시 x좌표 저장
case MotionEvent.ACTION_DOWN:
firstX = event.getX();
break;
// 업시 x좌표 저장
case MotionEvent.ACTION_UP:
lastX = event.getX();
if(Math.abs(firstX - lastX) > 70){
// ViewFlipper를 이용해서 뷰전환되는 메서드
changeView(this, firstX, lastX);
return true;
}
break;
}
return super.dispatchTouchEvent(event);
}



public class FlickFrameLayout extends FrameLayout{ Context mContext = null; boolean isFlick = false; float firstX; float firstY; float lastX; float lastY; OnRightFilckListener mOnRightFilckListener; OnLeftFilckListener mOnLeftFilckListener; public FlickFrameLayout(Context context) { // TODO Auto-generated constructor stub super(context); mContext = context; } public FlickFrameLayout (Context context, AttributeSet attr){ super(context, attr); mContext = context; init(); } void init(){ } @Override public boolean dispatchTouchEvent(MotionEvent ev) { switch(ev.getAction()){ case MotionEvent.ACTION_DOWN: if(!isFlick){ isFlick = true; firstX = ev.getX(); firstY = ev.getY(); } break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: if(isFlick){ isFlick = false; lastX = ev.getX(); lastY = ev.getY(); boolean isOverFlickLength = Math.abs(lastX - firstX) > 70; boolean isRightFlick = lastX - firstX > 0; if(isOverFlickLength){ if(isRightFlick){ mOnRightFilckListener.onRightFilck(this); }else{ mOnLeftFilckListener.onLeftFilck(this); } return true; } } break; } return super.dispatchTouchEvent(ev); } public interface OnRightFilckListener{ public void onRightFilck(View v); } public OnRightFilckListener getOnRightFilckListener() { return mOnRightFilckListener; } public void setOnRightFilckListener(OnRightFilckListener mOnRightFilckListener) { this.mOnRightFilckListener = mOnRightFilckListener; } public interface OnLeftFilckListener{ public void onLeftFilck(View v); } public OnLeftFilckListener getOnLeftFilckListener() { return mOnLeftFilckListener; } public void setOnLeftFilckListener(OnLeftFilckListener mOnLeftFilckListener) { this.mOnLeftFilckListener = mOnLeftFilckListener; } }보면 아실겁니다. 어떻게 했는지...