print( sjw.iq == 200) output : true

[Android] 더블탭, 더블클릭 구현 (GestureDetector를 사용하지 않고 단순 코드) 본문

Android

[Android] 더블탭, 더블클릭 구현 (GestureDetector를 사용하지 않고 단순 코드)

sjwiq200 2019. 7. 23. 00:41
728x90
반응형

안녕하세요~! 

 

인스타에서 더블클릭을 하면 좋아요가 눌리게 되잖아요~?

 

저도 그런 기능을 추가해야되고, 앞으로도 뭔가 자주 이용할거 같아서 포스팅을 합니다~!

 

그리고 더블탭, 더블클릭 기능을 GestureDetector를 사용하지 않고 단순하게 소스코드로 만들어보려고 합니다.

 

GestureDetector를 사용하면 더 간단하게 구현할 수 있겠지만...

 

어플 구조상 구현하기가 애매해서요...

 

어댑터 클래스가 다음과 같이 있습니다!

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public void setListener(OnItemClickListener listener) {
        this.listener = listener;
    }
 
    public interface OnItemClickListener {
 
        void onClickMore(int pos);
 
        void onClickLike(int pos);
 
        void onClickComment(int pos);
 
        void onClickShare(int pos);
 
        void onClickDetail(int pos);
 
        void onClickMap(int pos);
 
        void onClickImage(int reviewPos, int imageIdx);
 
        void onClickProfile(int pos);
 
        void onClickReplyDetail(int pos);
    }
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

 

그리고 리사이클 뷰가 있는 프래그 먼트에는 OnitemClickListener 가 구현되어있는데요!

 

그중에서 onClickImage만 따로 보여드리겠습니다!

저 메소드에 구현해 놨거든요~!

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
private boolean waitDouble = true;
private static final int DOUBLE_CLICK_TIME = 200// double click timer
 
@Override
public void onClickImage(int reviewPos, int imageIdx) {
    if (waitDouble == true) {
        waitDouble = false;
        Thread thread = new Thread() {
            @Override
            public void run() {
                try {
                    sleep(DOUBLE_CLICK_TIME);
                    if (waitDouble == false) {
                        waitDouble = true;
                        //single click event
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };
        thread.start();
    } else {
        waitDouble = true;
        //double click event
    }
 
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

waitDouble 과 DOUBLE_CLICK_TIME를 전역변수로 선언해주시고~

 

단일 클릭과 더블 클릭 이벤트라고 주석이 되어 있는 부분에 필요하신 부분을 입력하시면 됩니다~!

 

한번 쑤욱 보시면 별로 어려울 것 없을 거 같네요~~

 

그러면 저는 이만 물러가보겠습니다~!

728x90
반응형
Comments