写这篇文章的初衷是因为我学习到了新的知识,在android这个新领驭我表示我压力很大,所以得赶紧学啊。。这篇文章是原创,但是文中有部分代码是从我的下载的demo中 copy 过来的(我一向是看别的代码就学习思想,了解整个过程。。。坛友无喷!)
好了上面罗嗦了很多,先大致说一下这篇文章的重点:如题 我想怎么实现屏幕类似于主屏的那个
切换效果,但是我们 又可以让你在当前屏幕下能够上下滚动。那么怎么实现呢?其实使用
ViewFlipper 翻转视图 和 ScrollView 就行了。 思路如下:首先我们要配置一个 ViewFlipper
,这个就是用于视图的切换的,如果我在这个ViewFlipper 再添加ScrollView 是不是就可以实现
上下滚动了。。。呵呵!对吧,貌似这个逻辑是可行的哦!
好了接下来 我们一步一步的来,首先在我们在 layout 的主程序界面main.xml中添加
ViewFlipper组件然后定义其id 方便待会程序使用(暂且 就叫viewFlipper吧),然后再另外
创建一个layout文件里面定义一个ScrollView(注意这个scrollView 是你重写系统的ScrollView 一定要重写哦。。。重写的效果就是为了在 onTouchEvent 的时候能添加上 手势探测 这个类 GestureDetector 不然的话如果使用 系统的我不知道能不能实现 貌似没有直接实现的方法)
好了准备工作就到这里然后我们开始在activity中进行设置了。。
首先呢 。。还是取得整个main.xml的View
然后 就是取得这个ViewFlipper 了。。他的Id 就是 viewFlipper
拿到这个对象之后最重要的就是要为这个翻转的 视图填充内容了。。。。(没有内容的话我们还让他翻转个屁啊!哈哈。。。)
所以我们要调用他的
象了。这里我们定义了一个LayouInflater从当前类 来获取这个视图(ScrollView)
直接使用LayouInflater下面的
然后给scrollView 设置
触摸事件和手势事件。下面看一些手势监听:
这个地方就是android 来计算你是往左滑动还是向右滑动了。。。判断却是滑动之后会重新填写你 viewFlipper里面的view(既然是用滑动就是view里面的内容就是个数组了。。)然后为viewFlipper顶一下 滑动的效果。。。。
好了整个实现 屏幕滑动的效果已经实现了。。呵呵。。你会觉得他就是一个gallery 。。我也是这么认为的。。。。但是还是有些不同的。。就是那个scrollview 。。如果你里面的内容很多的话。。呵呵。。那就可以实现滚动了。。。不过 你的再填充 ViewFlipper的时候那个布局文件。。的布局类型要是线性布局了。。。。
备注:我要补充一点,博友们可以看看。。ViewFlipper 还有一些很有趣的设置。。比如让view自动滑动。。。这就类似于现在我们在看一个小说然后设置它屏幕滚动 一样。。是不是呢??以及 滚动的频率都是可以设置的。。。
好了上面罗嗦了很多,先大致说一下这篇文章的重点:如题 我想怎么实现屏幕类似于主屏的那个
切换效果,但是我们 又可以让你在当前屏幕下能够上下滚动。那么怎么实现呢?其实使用
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 了。。他的Id 就是 viewFlipper
ViewFlipper viewFlipper = (ViewFlipper)findViewById(R.id.viewFlipper);
拿到这个对象之后最重要的就是要为这个翻转的 视图填充内容了。。。。(没有内容的话我们还让他翻转个屁啊!哈哈。。。)
所以我们要调用他的
addView
方法了,那么接下来就是取得 要添加的对
象了。这里我们定义了一个LayouInflater从当前类 来获取这个视图(ScrollView)
直接使用LayouInflater下面的
inflate(R.layout.view, null);
这个方法填充这个我们暂且就称作一个scrollView,然后通过scrollView去拿到view.xml中 定义的ScrollView(一定要是自己重写过而且已经设置了手势探测器 的哦)定义它为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{
//这里面就是去实现所有的方法了。。。。。。但是除了一个方法之外其他的都没必要重写
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY){
// TODO Auto-generated method stub
if (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;
}
};
这个地方就是android 来计算你是往左滑动还是向右滑动了。。。判断却是滑动之后会重新填写你 viewFlipper里面的view(既然是用滑动就是view里面的内容就是个数组了。。)然后为viewFlipper顶一下 滑动的效果。。。。
好了整个实现 屏幕滑动的效果已经实现了。。呵呵。。你会觉得他就是一个gallery 。。我也是这么认为的。。。。但是还是有些不同的。。就是那个scrollview 。。如果你里面的内容很多的话。。呵呵。。那就可以实现滚动了。。。不过 你的再填充 ViewFlipper的时候那个布局文件。。的布局类型要是线性布局了。。。。
备注:我要补充一点,博友们可以看看。。ViewFlipper 还有一些很有趣的设置。。比如让view自动滑动。。。这就类似于现在我们在看一个小说然后设置它屏幕滚动 一样。。是不是呢??以及 滚动的频率都是可以设置的。。。