在做一个小项目中感觉滑屏的效果很棒,于是就上网查了一下,大致分三种,有的用
Scroller类来实现,有的用ViewPager来实现,可对初学Android的我来说都看的一头雾水。正在纠结的时候看到了用GestureDetector绑定ViewFlipper来实现,这种方法对我来说应该算是最实用的了,为什么?因为代码少,可移植性强,再说了我一惯都是一个十足的拿来主义,又不打算做一个很牛逼的程序猿,学这个只是为了实现我的一些小目的,仅此而已,所以太深层次的东西我就不去探究了,实用为主嘛!
接下来就是创建四个手势的动作了,很简单,在工程列表的res目录下创建一个名为anim的文件夹,然后分别建立四个XML文件,android:duration="500" 是滑屏动作时间为500毫秒,你懂的!
res/anim/push_left_in.xml
res/anim/push_left_out.xml
res/anim/push_right_in.xml
res/anim/push_right_out.xml
接下来就来完成我们最后一步也是最主要的一步,编辑 MainActivity,还是直接上代码吧。这句我的源代码中就这样显示的gestureDetector = newGestureDetector(this);新手不懂,如有大神给兄弟我讲讲不胜感激。
通过测试完全可以实现滑屏实现视图的切换,关于用
GestureDetector和
ViewFlipper组合来实现滑屏的例子网上很多,我的这些代码基本都是拿来主义,后来通过自己不断修改和测试来一点点实现目标。这里开始最困惑我的就是视图的载入,现在看起来就用一行
viewFlipper.showNext()就可以实现,最蛋疼的是我被其它实例中的 addView()把思路导偏了,好在是先把人家的代码从头到尾看了一下,要不现在也没功夫在谈我扯蛋的经验,没办法谁让咱没基础完全是拿来主义呢,哈哈。
闲话少说看代码吧! 这段很直观,就是创建三个视图,做为三个屏的界面,这段代码的重点是 ViewFlipper的运用。
res/anim/push_left_in.xml
res/anim/push_left_out.xml
res/anim/push_right_in.xml
res/anim/push_right_out.xml
接下来就来完成我们最后一步也是最主要的一步,编辑 MainActivity,还是直接上代码吧。这句我的源代码中就这样显示的gestureDetector = new
import android.app.Activity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ViewFlipper;
public class MainActivity extends Activity implements android.view.GestureDetector.OnGestureListener {
private GestureDetector gestureDetector = null;
private ViewFlipper viewFlipper = null;
private Activity mActivity = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mActivity = this;
viewFlipper = (ViewFlipper) findViewById(R.id.viewflipper);
gestureDetector = new GestureDetector(this); // 声明检测手势事件
viewFlipper.setDisplayedChild(-1); //默认初始视图为第一个(如果不要这行的话我的测试结果是默认显示第二个视图)
viewFlipper.showNext();//根据手势翻页
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return gestureDetector.onTouchEvent(event); // 注册手势事件
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
if (e2.getX() - e1.getX() > 120) { // 从左向右滑动(左进右出)
Animation rInAnim = AnimationUtils.loadAnimation(mActivity, R.anim.push_right_in); // 向右滑动左侧进入的渐变效果(alpha 0.1 -> 1.0)
Animation rOutAnim = AnimationUtils.loadAnimation(mActivity, R.anim.push_right_out); // 向右滑动右侧滑出的渐变效果(alpha 1.0 -> 0.1)
viewFlipper.setInAnimation(rInAnim);
viewFlipper.setOutAnimation(rOutAnim);
viewFlipper.showPrevious();
return true;
} else if (e2.getX() - e1.getX() < -120) { // 从右向左滑动(右进左出)
Animation lInAnim = AnimationUtils.loadAnimation(mActivity, R.anim.push_left_in); // 向左滑动左侧进入的渐变效果(alpha 0.1 -> 1.0)
Animation lOutAnim = AnimationUtils.loadAnimation(mActivity, R.anim.push_left_out); // 向左滑动右侧滑出的渐变效果(alpha 1.0 -> 0.1)
viewFlipper.setInAnimation(lInAnim);
viewFlipper.setOutAnimation(lOutAnim);
viewFlipper.showNext();
return true;
}
return true;
}
@Override
public boolean onDown(MotionEvent e) {
return false;
}
@Override
public void onLongPress(MotionEvent e) {
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
return false;
}
@Override
public void onShowPress(MotionEvent e) {
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
}