android实现屏幕滑动(类似主屏滑动第一屏---->到第2屏)
写这篇文章的初衷是因为我学习到了新的知识,在android这个新领驭我表示我压力很大,所以得赶紧学啊。。这篇文章是原创,但是文中有部分代码是从我的下载的demo中 copy 过来的(我一向是看别的代码就学习思想,了解整个过程。。。坛友无喷!)
好了上面罗嗦了很多,先大致说一下这篇文章的重点:如题 我想怎么实现屏幕类似于主屏的那个
切换效果,但是我们 又可以让你在当前屏幕下能够上下滚动。那么怎么实现呢?其实使用
ViewFlipper 翻转视图 和 ScrollView 就行了。 思路如下:首先我们要配置一个 ViewFlipper
,这个就是用于视图的切换的,如果我在这个ViewFlipper 再添加ScrollView 是不是就可以实现
上下滚动了。。。呵呵!对吧,貌似这个逻辑是可行的哦!
好了接下来 我们一步一步的来,首先在我们在 layout 的主程序界面main.xml中添加
ViewFlipper组件然后定义其id 方便待会程序使用(暂且 就叫viewFlipper吧),然后再另外
创建一个layout文件里面定义一个ScrollView(注意这个scrollView 是你重写系统的ScrollView 一定要重写哦。。。重写的效果就是为了在 onTouchEvent 的时候能添加上 手势探测 这个类 GestureDetector 不然的话如果使用 系统的我不知道能不能实现 貌似没有直接实现的方法)
好了准备工作就到这里然后我们开始在activity中进行设置了。。
首先呢 。。还是取得整个main.xml的View
requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.main);//main里面定义我们的那个ViewFlipper 哦
ViewFlipper viewFlipper = (ViewFlipper)findViewById(R.id.viewFlipper);
addView方法了,那么接下来就是取得 要添加的对
inflate(R.layout.view, null);这个方法填充这个我们暂且就称作一个scrollView,然后通过scrollView去拿到view.xml中 定义的ScrollView(一定要是自己重写过而且已经设置了手势探测器 的哦)定义它为scrollView 好了。。
scroll.setOnTouchListener(onTouchListener);GestureDetector gestureDetector = new GestureDetector(new GestureListener());private View.OnTouchListener onTouchListener = new View.OnTouchListener() {public boolean onTouch(View v, MotionEvent event) {return gestureDetector.onTouchEvent(event);}};GestureListener extends SimpleOnGestureListener{//这里面就是去实现所有的方法了。。。。。。但是除了一个方法之外其他的都没必要重写@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY){// TODO Auto-generated method stubif (e1.getX() - e2.getX() > 100 && Math.abs(velocityX) > 50) {selectedPosition = selectedPosition + 1 < titleArray.length ? (selectedPosition + 1) : 0;viewFlipper.addView(getContentView());viewFlipper.setInAnimation(AnimationControl.inFromRightAnimation()); viewFlipper.setOutAnimation(AnimationControl.outToLeftAnimation());viewFlipper.showNext();viewFlipper.removeViewAt(0);} else if (e2.getX() - e1.getX() > 100 && Math.abs(velocityX) > 50) {selectedPosition = selectedPosition > 0 ? (selectedPosition - 1) : (titleArray.length - 1);viewFlipper.addView(getContentView());viewFlipper.setInAnimation(AnimationControl.inFromLeftAnimation()); viewFlipper.setOutAnimation(AnimationControl.outToRightAnimation());viewFlipper.showNext();viewFlipper.removeViewAt(0);} return true; }};