001
package
com.ideasandroid.demo;
002
003
import
android.app.Activity;
004
import
android.os.Bundle;
005
import
android.view.GestureDetector;
006
import
android.view.MotionEvent;
007
import
android.view.View;
008
import
android.view.GestureDetector.OnGestureListener;
009
import
android.view.View.OnTouchListener;
010
import
android.view.animation.AccelerateInterpolator;
011
import
android.view.animation.Animation;
012
import
android.view.animation.TranslateAnimation;
013
import
android.widget.ViewFlipper;
014
public
class
ViewFlipperDemo
extends
Activity
implements
OnGestureListener,OnTouchListener{
015
private
ViewFlipper mFlipper;
016
GestureDetector mGestureDetector;
017
private
int
mCurrentLayoutState;
018
private
static
final
int
FLING_MIN_DISTANCE =
100
;
019
private
static
final
int
FLING_MIN_VELOCITY =
200
;
020
021
@Override
022
public
void
onCreate(Bundle savedInstanceState) {
023
super
.onCreate(savedInstanceState);
024
setContentView(R.layout.main);
025
mFlipper = (ViewFlipper) findViewById(R.id.flipper);
026
027
mGestureDetector =
new
GestureDetector(
this
);
028
029
mFlipper.setOnTouchListener(
this
);
030
mCurrentLayoutState =
0
;
031
032
mFlipper.setLongClickable(
true
);
033
}
034
035
/**
036
* 此方法在本例中未用到,可以指定跳转到某个页面
037
* @param switchTo
038
*/
039
public
void
switchLayoutStateTo(
int
switchTo) {
040
while
(mCurrentLayoutState != switchTo) {
041
if
(mCurrentLayoutState > switchTo) {
042
mCurrentLayoutState--;
043
mFlipper.setInAnimation(inFromLeftAnimation());
044
mFlipper.setOutAnimation(outToRightAnimation());
045
mFlipper.showPrevious();
046
}
else
{
047
mCurrentLayoutState++;
048
mFlipper.setInAnimation(inFromRightAnimation());
049
mFlipper.setOutAnimation(outToLeftAnimation());
050
mFlipper.showNext();
051
}
052
053
}
054
;
055
}
056
057
/**
058
* 定义从右侧进入的动画效果
059
* @return
060
*/
061
protected
Animation inFromRightAnimation() {
062
Animation inFromRight =
new
TranslateAnimation(
063
Animation.RELATIVE_TO_PARENT, +
1
.0f,
064
Animation.RELATIVE_TO_PARENT,
0
.0f,
065
Animation.RELATIVE_TO_PARENT,
0
.0f,
066
Animation.RELATIVE_TO_PARENT,
0
.0f);
067
inFromRight.setDuration(
500
);
068
inFromRight.setInterpolator(
new
AccelerateInterpolator());
069
return
inFromRight;
070
}
071
072
/**
073
* 定义从左侧退出的动画效果
074
* @return
075
*/
076
protected
Animation outToLeftAnimation() {
077
Animation outtoLeft =
new
TranslateAnimation(
078
Animation.RELATIVE_TO_PARENT,
0
.0f,
079
Animation.RELATIVE_TO_PARENT, -
1
.0f,
080
Animation.RELATIVE_TO_PARENT,
0
.0f,
081
Animation.RELATIVE_TO_PARENT,
0
.0f);
082
outtoLeft.setDuration(
500
);
083
outtoLeft.setInterpolator(
new
AccelerateInterpolator());
084
return
outtoLeft;
085
}
086
087
/**
088
* 定义从左侧进入的动画效果
089
* @return
090
*/
091
protected
Animation inFromLeftAnimation() {
092
Animation inFromLeft =
new
TranslateAnimation(
093
Animation.RELATIVE_TO_PARENT, -
1
.0f,
094
Animation.RELATIVE_TO_PARENT,
0
.0f,
095
Animation.RELATIVE_TO_PARENT,
0
.0f,
096
Animation.RELATIVE_TO_PARENT,
0
.0f);
097
inFromLeft.setDuration(
500
);
098
inFromLeft.setInterpolator(
new
AccelerateInterpolator());
099
return
inFromLeft;
100
}
101
102
/**
103
* 定义从右侧退出时的动画效果
104
* @return
105
*/
106
protected
Animation outToRightAnimation() {
107
Animation outtoRight =
new
TranslateAnimation(
108
Animation.RELATIVE_TO_PARENT,
0
.0f,
109
Animation.RELATIVE_TO_PARENT, +
1
.0f,
110
Animation.RELATIVE_TO_PARENT,
0
.0f,
111
Animation.RELATIVE_TO_PARENT,
0
.0f);
112
outtoRight.setDuration(
500
);
113
outtoRight.setInterpolator(
new
AccelerateInterpolator());
114
return
outtoRight;
115
}
116
117
public
boolean
onDown(MotionEvent e) {
118
119
return
false
;
120
}
121
122
123
124
125
126
127
128
129
130
131
public
boolean
onFling(MotionEvent e1, MotionEvent e2,
float
velocityX,
132
float
velocityY) {
133
if
(e1.getX() - e2.getX() > FLING_MIN_DISTANCE
134
&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {
135
136
137
mFlipper.setInAnimation(inFromRightAnimation());
138
139
mFlipper.setOutAnimation(outToLeftAnimation());
140
mFlipper.showNext();
141
}
else
if
(e2.getX() - e1.getX() > FLING_MIN_DISTANCE
142
&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {
143
144
mFlipper.setInAnimation(inFromLeftAnimation());
145
mFlipper.setOutAnimation(outToRightAnimation());
146
mFlipper.showPrevious();
147
}
148
return
false
;
149
}
150
151
public
void
onLongPress(MotionEvent e) {
152
153
154
}
155
156
public
boolean
onScroll(MotionEvent e1, MotionEvent e2,
float
distanceX,
157
float
distanceY) {
158
return
false
;
159
}
160
161
public
void
onShowPress(MotionEvent e) {
162
163
164
}
165
166
public
boolean
onSingleTapUp(MotionEvent e) {
167
168
return
false
;
169
}
170
public
boolean
onTouch(View v, MotionEvent event) {
171
172
return
mGestureDetector.onTouchEvent(event);
173
}
174
}