Touch Event 처리순서
Activity.dispatchTouchEvent()
ViewGroup.dispatchTouchEvent()
ViewGroup.onInterceptTouchEvent()
View.dispatchTouchEvent()
View.onTouch()
View.onTouchEvent()
ViewGroup.onTouch()
ViewGroup.onTouchEvent()
Activity.onTouchEvent()
======================

private int mTouchDownX, mDistanceX;

private View.OnTouchListener mouchListener = new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch(event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                mTouchDownX = (int)event.getRawX();
                mDistanceX = mTouchDownX - (int)v.getX();
                break;
            case MotionEvent.ACTION_MOVE:
                v.setX(event.getRawX()-mDistanceX);
                break;
            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_CANCEL:
                break;
        }
        return true;
    }
};

mImageView.setOnTouchListener(mouchListener);


최초에 event.getX()로 처리했을 때에는 이미지가 너무 좌우로 떨려서 표시된다.(터치 위치가 계속 바뀌어서 올라오기 때문에...)

StackOverflow에서 아래 내용을 발견하고 getRawX를 적용하니 떨림이 완전히 사라졌다.

Try to use motionEvent.getRawX() and motionEvent.getRawY() instead of getY and getX

link :

smooth drag : http://stackoverflow.com/questions/8535599/android-drag-view-smooth

view moving : http://stackoverflow.com/questions/14814542/moving-imageview-with-touch-event





+ Recent posts