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





저작자 표시 비영리 변경 금지
신고

'programmer > android' 카테고리의 다른 글

Error:java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException:  (0) 2016.12.14
AAR library in Android Studio  (0) 2016.10.18
Touch Event and Smooth drag  (0) 2016.08.17
GridView dynamic height  (0) 2014.04.29
Sms receive & scan  (0) 2013.10.03
Java Doc 생성  (0) 2013.07.31
Posted by ocsoosoo

댓글을 달아 주세요