>  기사  >  Java  >  Android 슬라이드업 제스처는 레이아웃 수준을 높이지 않고도 클릭 영역을 트리거하고 확장합니다.

Android 슬라이드업 제스처는 레이아웃 수준을 높이지 않고도 클릭 영역을 트리거하고 확장합니다.

高洛峰
高洛峰원래의
2016-12-01 15:32:001598검색

최근 프로젝트에서는 제스처 감지기(GestureDetector)를 사용한 후 onFling에서 판단하는 방식으로 위로 미끄러지거나 클릭하여 인터페이스 밖으로 미끄러지는 효과를 실현해야 하지만 문제가 발생합니다. 위로 미끄러지는 제스처는 다음과 같습니다. 전체 레이아웃에 대한 것이지만 별도의 보기에 대한 올바른 클릭 모니터링 설정이 있는 경우 해당 보기에서 위로 미끄러지는 제스처는 유효하지 않습니다.

이 View 자체가 클릭용으로 특별히 사용된 경우에는 문제가 없습니다. 아쉽게도 이 View의 크기가 크지 않아 클릭 영역을 확장해야 합니다.

우리가 생각할 수 있는 첫 번째 방법은 RelativeLayout, LinearLayout 등과 유사한 컨테이너로 View를 래핑하는 것이지만 이렇게 하면 레이아웃에 레이어가 하나 더 추가됩니다.

레이어를 추가하지 않고도 클릭 영역을 확장할 수 있는 방법이 있을까요?

GestureDetector는 Android에서 제공하는 제스처 작업 클래스로 단일 클릭, 두 번 클릭, 길게 누르기 및 기타 작업을 제공하고 이러한 이벤트를 onTouch에 전달하므로 이를 사용하여 클릭 트리거를 결정할 수 있습니다. 이벤트입니다. 어떤 컨트롤인가요?

하지만 우리의 문제는 컨트롤을 식별하는 것이 아니라 클릭 영역을 확장하는 것이므로 사용자의 클릭 동작이 어느 영역에 속하는지 알아야 합니다.

다행히 MotionEvent에서는 이벤트 발생 시 좌표를 제공해주기 때문에 클릭 시 좌표를 알 수 있고, 추가적으로 지정된 영역 내에 있는지도 확인할 수 있습니다.

MotionEvent는 안드로이드에서 터치 코딩에 있어서 중요한 클래스로, 화면에 사용자의 터치 정보를 제공합니다. MotionEvent를 통해 터치 이벤트 유형과 터치 좌표를 얻을 수 있으며 이제 멀티 터치를 지원하고 터치 인덱스 정보도 얻을 수 있습니다.

코드부터 시작해 보겠습니다.

@Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_DOWN){
            int downX = (int)event.getX();
            int[] location = new int[2];
            ivMore.getLocationInWindow(location);
            if(Math.abs(downX - location[0]) <= 50){
                 ...
            }
        }
        return gestureDetector.onTouchEvent(event);
    }

먼저 MotionEvent의 getAction을 통해 터치 이벤트 유형을 가져옵니다. 클릭 유형은 ACTION_DOWN이고 MotionEvent의 getX를 통해 클릭을 가져옵니다. x 좌표, getLocationInWindow를 통해 지정된 View의 좌표를 얻습니다. 여기서는 컴포넌트의 x축 좌표 +/- 50(왼쪽 및 오른쪽 범위를 나타냄)이 트리거 범위로 지정됩니다.

이제 레이아웃 수준을 높이지 않고도 클릭 범위를 확장할 수 있습니다.

슬라이딩 작업은 두 개의 역사적 MotionEvent를 전달하는 onFling 콜백에서 수행되며 Y축 좌표가 변경되었는지 여부만 확인하면 됩니다.

안드로이드 터치는 꽤 큰 주제입니다. 우리는 우리 자신의 요구 사항을 명확히 하는 것을 전제로 그에 상응하는 빠른 해결책을 찾으면 됩니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:자바 동적 프록시다음 기사:자바 동적 프록시