BatchStepSensor / src / com.example.android.batchstepsensor / cardstream /

CardLayout.java

1
/*
2
* Copyright 2013 The Android Open Source Project
3
*
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
* you may not use this file except in compliance with the License.
6
* You may obtain a copy of the License at
7
*
8
*     http://www.apache.org/licenses/LICENSE-2.0
9
*
10
* Unless required by applicable law or agreed to in writing, software
11
* distributed under the License is distributed on an "AS IS" BASIS,
12
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
* See the License for the specific language governing permissions and
14
* limitations under the License.
15
*/
16
 
17
 
18
 
19
 
20
package com.example.android.batchstepsensor.cardstream;
21
 
22
import android.content.Context;
23
import android.util.AttributeSet;
24
import android.view.MotionEvent;
25
import android.view.ViewConfiguration;
26
import android.widget.RelativeLayout;
27
 
28
/**
29
 * Custom Button with a special 'pressed' effect for touch events.
30
 */
31
public class CardLayout extends RelativeLayout {
32
 
33
    private boolean mSwiping = false;
34
    private float mDownX = 0.f;
35
    private float mDownY = 0.f;
36
    private float mTouchSlop = 0.f;
37
 
38
    public CardLayout(Context context) {
39
        super(context);
40
        init();
41
    }
42
 
43
    public CardLayout(Context context, AttributeSet attrs) {
44
        super(context, attrs);
45
        init();
46
    }
47
 
48
    public CardLayout(Context context, AttributeSet attrs, int defStyle) {
49
        super(context, attrs, defStyle);
50
        init();
51
    }
52
 
53
    private void init(){
54
        setFocusable(true);
55
        setDescendantFocusability(FOCUS_AFTER_DESCENDANTS);
56
        setWillNotDraw(false);
57
        setClickable(true);
58
 
59
        mTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop() * 2.f;
60
    }
61
 
62
    @Override
63
    public boolean onTouchEvent(MotionEvent event) {
64
        switch(event.getAction()){
65
            case MotionEvent.ACTION_CANCEL:
66
            case MotionEvent.ACTION_UP:
67
                mSwiping = false;
68
                break;
69
        }
70
        return super.onTouchEvent(event);
71
    }
72
 
73
    @Override
74
    public boolean onInterceptTouchEvent(MotionEvent event) {
75
 
76
        switch(event.getAction()){
77
            case MotionEvent.ACTION_MOVE:
78
                if( !mSwiping ){
79
                    mSwiping = Math.abs(mDownX - event.getX()) > mTouchSlop;
80
                }
81
                break;
82
            case MotionEvent.ACTION_DOWN:
83
                mDownX = event.getX();
84
                mDownY = event.getY();
85
                mSwiping = false;
86
                break;
87
            case MotionEvent.ACTION_CANCEL:
88
            case MotionEvent.ACTION_UP:
89
                mSwiping = false;
90
                break;
91
        }
92
        return mSwiping;
93
    }
94
}