본문 바로가기
프로그래밍/android

onInterceptTouchEvent함수를 이용해 자식 뷰로 전달되는 이벤트를 가로채기

by 신일석 2014. 12. 8.

MainActivity.java에


코드시작package com.actionshin.touchevent;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.FrameLayout;

/**
 * Created by ilsuk on 14. 12. 7..
 */
public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // 1.뷰그룹을 생성한다.
        CustomViewGroup viewGroup = new CustomViewGroup(this);
        viewGroup.setBackgroundColor(Color.BLUE);
        FrameLayout.LayoutParams viewGroupLp = new FrameLayout.LayoutParams(300, 300);

        // 2.뷰를 생성한다.
        CustomView view = new CustomView(this);
        view.setBackgroundColor(Color.YELLOW);
        FrameLayout.LayoutParams viewLp = new FrameLayout.LayoutParams(150, 150);

        // 3.생성된 뷰를 뷰그룹에 추가한다.
        viewGroup.addView(view, viewLp);

        // 4.콘텐츠 영역에 생성된 뷰그룹을 추가한다.
        setContentView(viewGroup, viewGroupLp);

    }

    /* 액티비티의 dispatchTouchEvent 함수를 재정의한다. */
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        Log.e("shin", "Activity dispatchTouchEvent() >> " + ev.getAction());
        return super.dispatchTouchEvent(ev);
    }

    /* 액티비티의 onTouchEvent 함수를 재정의한다. */
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        Log.e("shin", "Activity onTouchEvent() >> " + event.getAction());
        return super.onTouchEvent(event);
    }
}코드끝





노락박스가 뷰그룹이다. 뷰그룹에서 20px이상 move를 하면 뷰에게 전달되는 이벤트를 가로채게 된다.





Log에 찍힌 내용을 보자. 뷰그룹의 onInterceptTouchEvent가 true를 반환하여 이벤트를 가로채고, 자식뷰의 onTouchEvent함수는 ACTION_CANCEL(3)을 전달받게 된다.



'프로그래밍 > android' 카테고리의 다른 글

this  (0) 2014.12.08
로그 남기기  (0) 2014.12.08
MotionEvent 객체  (0) 2014.12.04