android 平滑切换屏幕Gallery、HorizontalScrollView、ViewFilpper、ViewFlow、ViewPager

1. ViewFlipper + GestureDetector = 用ViewSwitcher+ 动画效果

android手势识别ViewFlipper触摸动画

ViewFlipper主要用来实现View的自动切换。该类提供了如下几个主要的方法:

  • setFilpInterval:设置View切换的时间间隔。参数为毫秒。
  • startFlipping:开始进行View的切换,时间间隔是上述方法设置的间隔数。切换会循环进行。
  • stopFlipping:停止View切换。
  • setAutoStart:设置是否自动开始。如果设置为“true”,当ViewFlipper显示的时候View的切换会自动开始。

一般情况下,我们都会使用ViewFilpper类实现View的切换,而不使用它的父类ViewAnimator类。

1.1 实现滑动—GestureDetector介绍

如果想要实现滑动翻页的效果,就要了解另外一个类:android.view.GestureDetector类。GestureDetector类中可以用来检测各种手势事件。该类有两个回调接口,分别用来通知具体的事件:

  • GestureDetector.OnDoubleTapListener:用来通知DoubleTap事件,类似于PC上面的鼠标的双击事件。
  • GestureDetector.OnGestureListener:用来通知普通的手势事件,该接口有六个回调方法,具体的可以查看API。这里想要实现滑动的判断,就需要用到其中的onFling()方法

2.Viewflow

viewflow 是 Android 平台上一个视图切换的效果库, 相当于 Android UI 部件提供水平滚动的 ViewGroup使用 Adapter 进行条目绑定。文档上说,当你需要在一系列不确定数目的view中滑动时,可以考虑使用ViewFlow。如果你的view数目确定,你应该使用Fragments 或兼容库里的ViewPager 

3. 自己重写ViewGroup来管理view

创新源于模仿之三:实现左右两个屏幕的切换

4. 对Gallery循环滑动,其实就是对继承自BaseAdapter的类进行操作.

Gallery循环滑动原理

5. HorizontalScrollView

Gallery每次切换图片时都要新建视图,造成太多的资源浪费,当新建项目的API最低为8,其实Gallery这个类已经过期。

The type Gallery is deprecated.This widget is no longer supported. 
ther horizontally scrolling widgets include HorizontalScrollView and ViewPager from the support library.

hsv.jpgHSVDemo.rar

图片中使用了两个HorizontalScrollView,排成上下两行,每行均类似于之前gallery的效果。数据源一行在App的drawable包中,一行在sdcard中,sdk中的图片要自己找了拷进去

5.利用系统自带的ViewPager

ViewPager来源于google 的补充组件android-support-v4.jar, ViewPager类提供了多界面切换的新效果。新效果有如下特征:

  • 当前显示一组界面中的其中一个界面。
  • 用户通过左右滑动界面时,当前的屏幕显示当前界面和下一个界面的一部分
  • 滑动结束后,界面自动跳转到当前选择的界面中

ViewPager提供了一个适配器,方便我们对各个View进行控制,而Workspace需要我们手动去添加,它相当于是一个”静态切换”。使用步骤:

  • 写一个ViewPager的专用Adapter,要继承PagerAdapter, 实现如下方法:

 private class AwesomePagerAdapter extends PagerAdapter{  getCount(), instantiateItem(), destroyItem(), isViewFromObject() }

  • 其后,把你需要展示出来的每一个页面也就是每一个View放到一个ArrayList里面保存起来。传过去给Adapter;
  • 最后把ViewPager实例化,也就是findViewById()。接着就调用ViewPager的setAdapter就OK了

awesomeAdapter = new AwesomePagerAdapter();
awesomePager = (ViewPager) findViewById(R.id.awesomepager);
awesomePager.setAdapter(awesomeAdapter);
mListViews = new ArrayList<View>();
mInflater = getLayoutInflater();//LayoutInflater作用是将layout的xml布局文件实例化为View类对象
mListViews.add(mInflater.inflate(R.layout.layout1, null));
mListViews.add(mInflater.inflate(R.layout.layout2, null));
mListViews.add(mInflater.inflate(R.layout.layout3, null));

6.双向滚动ScrollView

结论

ViewFlipper + Webview——WebView本身的onTouchEvent和ViewFlipper有冲突;

ViewPager + TabhostViewPager多页面滑动切换以及动画效果

ViewPager + ListView

ViewPager+GridView实现GridView左右滑动翻页,实时动态读取数据

ViewFilpper使用时主要是在有限的少数页面切换中比较合适,并且能够自定义每一个切换动画,用于一个应用间的画面切换比较合适,类似于ActivityGroup;

ViewPager与ViewFlow都能够使用适配器进行大量数据的适配。ViewFlow 适用于不确定数目的view中滑动;

ViewFlow由于提供源码,所以在扩展性上更强,可根据需要自行定制,比如加入循环播放等。

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

生活在西班牙

自己动手丰衣足食

BlueAsteroid

Just another WordPress.com site

Jing's Blog

Just another WordPress.com site

Start from here......

我的心情魔方

天才遠私廚

希望能做一個分享各種資訊的好地方

语义噪声

西瓜大丸子汤的博客

笑对人生,傲立寰宇

Just another WordPress.com site

Where On Earth Is Waldo?

A Project By Melanie Coles

the Serious Computer Vision Blog

A blog about computer vision and serious stuff

Cauthy's Blog

paper review...

Cornell Computer Vision Seminar Blog

Blog for CS 7670 - Special Topics in Computer Vision

datarazzi

Life through nerd-colored glasses

Luciana Haill

Brainwaves Augmenting Consciousness

槑烎

1,2,∞

Dr Paul Tennent

and the university of nottingham

turn off the lights, please

A bunch of random, thinned and stateless thoughts around the Web

%d bloggers like this: