Android Studio

(Android Studio) 두번 터치(onDoubleTap) 예제

SAFE 2016. 5. 16. 18:40

다른 사이트 : 


http://technote.kr/67



아래가 예술..





출처(出處) : http://blog.csdn.net/nizhuanxingheit/article/details/48716769


중국어로 된 사이트에서 예제를 찾았다.


더블터치를 안드로이드에서 구현하려면 더블탭이란걸 써야한다.


잘 돌아가더라.. ㄷㄷ


MyButton.java


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
public class MyButton extends Button {
 
    private GestureDetector mGesture;
    private OnDoubleClickListener onDoubleClickListener;
    //自定义监听器接口
    interface OnDoubleClickListener{
        void onDoubleClick(View view);
    }
    //设置双击事件监听器的方法
    public void setOnDoubleClickListener(OnDoubleClickListener onDoubleClickListener){
        this.onDoubleClickListener = onDoubleClickListener;
    };
 
    public MyButton(Context context) {
        super(context);
    }
 
    public MyButton(final Context context, AttributeSet attrs) {
        super(context, attrs);
        //
        mGesture = new GestureDetector(context,new GestureDetector.SimpleOnGestureListener(){
            @Override
            public boolean onDoubleTap(MotionEvent e) {
                if(onDoubleClickListener!=null) {
                    onDoubleClickListener.onDoubleClick(MyButton.this);
                }
                Toast.makeText(context,"双击事件",Toast.LENGTH_SHORT).show();
                return true;
            }
 
            @Override
            public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
                /**
                 * 滑动和拖拽最好不要一起实现,会产生矛盾
                 */
                if(Math.abs(e1.getX()-e2.getX())>50){
                    setTranslationX(e2.getX() - e1.getX());
                    //根据手势滑动的距离而在水平方向上滑动控件
                    ObjectAnimator.ofFloat(MyButton.this,"translationX",getTranslationX(),e2.getX()-e1.getX())
                            .setDuration(500).start();
                    return true;
                }
                return super.onFling(e1, e2, velocityX, velocityY);
            }
 
            @Override
            public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
                //根据手势拖拽控件的相位而移动控件
                setTranslationX(getTranslationX()+e2.getX() - e1.getX());
                setTranslationY(getTranslationX()+e2.getY() - e1.getY());
                return super.onScroll(e1, e2, distanceX, distanceY);
            }
        });
    }
 
    public MyButton(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
 
    @Override
    public boolean dispatchTouchEvent(MotionEvent event) {
        if(event.getAction()==MotionEvent.ACTION_DOWN){
 
        }
        return super.dispatchTouchEvent(event);
    }
 
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        //touch事件传给onTouchEvent()
        mGesture.onTouchEvent(event);
        return super.onTouchEvent(event);
    }
}
cs



MainActivity.java



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class MainActivity extends Activity {
 
    private MyButton myButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        myButton = (MyButton) findViewById(R.id.button_doubleTap);
        myButton.setOnDoubleClickListener(new MyButton.OnDoubleClickListener() {
            @Override
            public void onDoubleClick(View view) {
                Log.d("","点击两次");
            }
        });
    }
 
}
cs


Activity_main.xml


1
2
3
4
5
6
7
8
9
10
11
12
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                tools:context=".MainActivity">
 
    <com.example.administrator.selfishgroupview.MyButton
        android:id="@+id/button_doubleTap"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="点击"/>
</RelativeLayout>
cs