`
whao189
  • 浏览: 123100 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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 了。。他的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自动滑动。。。这就类似于现在我们在看一个小说然后设置它屏幕滚动 一样。。是不是呢??以及 滚动的频率都是可以设置的。。。
分享到:
评论
3 楼 autorun 2012-09-24  
2 楼 whao189 2011-08-22  
haizibie453 写道
我想问下,如果屏幕是一个GridView,gridView里面显示9张图片,有200张图片,该怎么做,我在网上找的laucher的例子,都是写死的数据,没法实现动态更新数据。你这个例子有实现动态更新数据吗?


你说的动态更新数据?是不是想说的和listview一样,如果滚动到最底层那么再一次加载数

据?

其实不管怎么说,布局文件我们没有必要给他定死数据,完全可以界面重用 数据完全可以重新填充的我想这就是你说的动态 填充吧! 但是我觉得 无论如何 你必须获得这些图片 保存在数组中! 然后再去判断。。。


这个demo理论上 是可以的,你可以看到 inflate(R.layout.view, null);  这一段代码的。。

如果没有错的话这个view 就是你要进行重用的gridview 里面的数据就是你要动态填充的。

不知道对你有没有用。。。一起学习吧!!在此感谢你对于我的关注!
1 楼 haizibie453 2011-08-21  
我想问下,如果屏幕是一个GridView,gridView里面显示9张图片,有200张图片,该怎么做,我在网上找的laucher的例子,都是写死的数据,没法实现动态更新数据。你这个例子有实现动态更新数据吗?

相关推荐

Global site tag (gtag.js) - Google Analytics