MyException - 我的异常网
当前位置:我的异常网» Android » android兑现屏幕滑动(类似主屏滑动第一屏->到第2

android兑现屏幕滑动(类似主屏滑动第一屏->到第2屏)

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


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

据?

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


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

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

不知道对你有没有用。。。一起学习吧!!在此感谢你对于我的关注!

文章评论

程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
程序员的鄙视链
程序员的鄙视链
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
程序员和编码员之间的区别
程序员和编码员之间的区别
程序员都该阅读的书
程序员都该阅读的书
 程序员的样子
程序员的样子
鲜为人知的编程真相
鲜为人知的编程真相
总结2014中国互联网十大段子
总结2014中国互联网十大段子
漫画:程序员的工作
漫画:程序员的工作
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
那些争议最大的编程观点
那些争议最大的编程观点
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
旅行,写作,编程
旅行,写作,编程
代码女神横空出世
代码女神横空出世
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
老程序员的下场
老程序员的下场
编程语言是女人
编程语言是女人
中美印日四国程序员比较
中美印日四国程序员比较
每天工作4小时的程序员
每天工作4小时的程序员
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
我的丈夫是个程序员
我的丈夫是个程序员
10个调试和排错的小建议
10个调试和排错的小建议
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
我是如何打败拖延症的
我是如何打败拖延症的
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
程序员必看的十大电影
程序员必看的十大电影
一个程序员的时间管理
一个程序员的时间管理
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
为什么程序员都是夜猫子
为什么程序员都是夜猫子
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
Java程序员必看电影
Java程序员必看电影
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有