마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

scrollView touch 부분

0 추천
scrollview touchlistener 달아서 event 확인하고 있는데요

ACTION_DOWN이 먼저 안들어고 ACTION_MOVE가 먼저 들어오네요..

어떻게 하면 ACTION_DOWN이 먼저 들어올 수 있을 까요?
소녀소녀 (520 포인트) 님이 2014년 3월 17일 질문

1개의 답변

+1 추천
 
채택된 답변
어떠한 작업을 하시기 위해 스크롤 뷰에 터치리스너를 달려고 하시는 지 모르겠으나...

클릭이벤트를 원하시다면 터치이벤트 대신 클릭 이밴트를 다시면 될거구요~~!

무브이벤트를 받아 방향을 알고 싶으신거라면 무브이벤트내에서 플래그를 주어 처리하시면 됩니다.

실은 저도 다운이벤트를 받아 보고 싶었지만... 실패 했기에 위와 같이 처리 했습니다.
ThisPlus (46,920 포인트) 님이 2014년 3월 17일 답변
소녀소녀님이 2014년 3월 25일 채택됨
스크롤을 두개를 두어 동기화 시키는 작업을 하고있습니다만....
일단 답변 감사드립니다...
네 원하시는 작업을 무브이벤트에 플래그를 주어 처리 하시면 됩니다.^^
정말 죄송하지만 그 플래그를 주어서 처리를 어떻게 하는 것인가요?
무브이벤트라는건 ACTION_MOVE를 말씀하시는 건가요???
private OnTouchListener mListener = new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub
            int id = v.getId();
            int action = event.getAction();
            if (action == MotionEvent.ACTION_DOWN && mTouchStartView == 0)
                mTouchStartView = id;

            if (mTouchStartView == R.id.Hsc1 && mTouchStartView == id) {
                mHsc_Content.dispatchTouchEvent(event);
            } else if (mTouchStartView == R.id.Hsc2 && mTouchStartView == id) {
                mHsc_Subject.onTouchEvent(event);
            }

            if (action == MotionEvent.ACTION_UP)
                mTouchStartView = 0;

            return false;
        }
    };
리스너를 이렇게 달아주었거든요 조건이 DOWN이 들어와야 정상 동작하는데 .. DOWN이 안들어와서 지금 답답하네요... 구글링을 해봐도 딱히 저와 같은 케이스가 없고..
머리좀 굴려보시라고 간간히 대답드렸는데....
일단 다운이벤트에서 무얼 하는지 그리고 왜 다운이벤트에서 하는지 생각을 조금 해보시고 그걸 대신할 방법이 없는지 생각 해보시면 될텐데...
일단 간단한 소스만 으로 무얼 하시는지 정확 하지 않으나...
다운이벤트에서 이벤트를 받으시는 이유는 어떠한 값이던 님이 원하는 값이 한번 설정된후 업이벤트가 올때까지 변경 되지 않길 원하시는거 아닌가요???
그렇담 굳이 받기 어려운 다운에서 받지 말고 플래그를 두는거지요~~!
무브가 이루어지는 처음 한번만 이벤트를 받겠다고요...
그리고 업이 일어 날때 다시 트루로 바꿔 주심 대죠~~!

보기 소스 드립니다.

boolean frag = true;
   
    private OnTouchListener mListener = new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub
            int id = v.getId();
            int action = event.getAction();
            if (action == MotionEvent.ACTION_MOVE && mTouchStartView == 0){
                if(frag){
                    mTouchStartView = id;
                    frag = false;
                }
            }

            if (mTouchStartView == R.id.Hsc1 && mTouchStartView == id) {
                mHsc_Content.dispatchTouchEvent(event);
            } else if (mTouchStartView == R.id.Hsc2 && mTouchStartView == id) {
                mHsc_Subject.onTouchEvent(event);
            }

            if (action == MotionEvent.ACTION_UP){
                mTouchStartView = 0;
                frag = true;
            }

            return false;
        }
    };

님소스 약간 수정 해봤습니다.
님이 원하시는 결과가 나올거에요~~!
그리고 flag의 철자는 무시하셈 ㅋㅋ 플래그는 당연히 전역 변수여야 겠죠??
...