Android 实现多页界面左右滑动切换效果之入门+进阶 (ViewPager+PagerAdapter)

一、实现多面界面滑动切换方法有多种,就目前我所知道的大致有三种:

1.ViewFlipper Animation

2.ViewGroup Scroller VelocityTracker

3.ViewPager

本文主要介绍第三种ViewPager实现方式

 

二、ViewPagergoogle Android SDk中自带的一个附加包(android-support-v4.jar)的一个类可以用来实现屏幕间的切换。如下图:

[转载]Android <wbr>实现多页界面左右滑动切换效果之入门

如果在工程中没有看见该附加包,请及时更新sdk,并勾选Extras/Android Support Library安装

三、ViewPager的简单使用

创建工程ViewPagerDemo1

1.主布局文件activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
 <android.support.v4.view.ViewPager
     android:id="@+id/viewPager"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent">
     <requestFocus />
 </android.support.v4.view.ViewPager>
</RelativeLayout>

2.子页面布局 layout1.xml,layout2.xml,layout3.xml

     <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:background="#ff0000ff"
    android:gravity="center">
   
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="第一页"
        android:textColor="#ffffffff"
        android:textSize="30sp"/>
</LinearLayout>

本例子三个页面布局一样

3.主窗口代码:

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initViewPager();
    }
   
    private void initViewPager(){
     ViewPager viewPager = (ViewPager)findViewById(R.id.viewPager);
     
     View view1 = LayoutInflater.from(this).inflate(R.layout.layout1, null);
     View view2 = LayoutInflater.from(this).inflate(R.layout.layout2, null);
     View view3 = LayoutInflater.from(this).inflate(R.layout.layout3, null);
     
     ArrayList<View> views = new ArrayList<View>();
     views.add(view1);
     views.add(view2);
     views.add(view3);
     
     MYViewPagerAdapter adapter = new MYViewPagerAdapter();
     adapter.setViews(views);
     viewPager.setAdapter(adapter);
    }
}

4.另外还需继承PagerAdapter类实现自己MYPagerAdapter适配器类

public class MYViewPagerAdapter extends PagerAdapter {

 private ArrayList<View> views;
 
 public void setViews(ArrayList<View> views) {
  this.views = views;
 }

 @Override
 public int getCount() {
  return views.size();
 }

 @Override
 public boolean isViewFromObject(View arg0, Object arg1) {
  return arg0 == arg1;
 }

 @Override
 public void destroyItem(View container, int position, Object object) {
  
  ((ViewPager)container).removeView(views.get(position));
 }

 @Override
 public Object instantiateItem(View container, int position) {
  ((ViewPager)container).addView(views.get(position));
  return views.get(position);
 }

工程下载地址:http://115.com/file/e75fxvro#ViewPagerDemo1.rar

代码运行效果如下:

 

[转载]Android <wbr>实现多页界面左右滑动切换效果之入门
[转载]Android <wbr>实现多页界面左右滑动切换效果之入门



Android 实现多页界面左右滑动切换效果之进阶

 
前一篇已经简单介绍了ViewPager实现界面左右滑动的简单实现方法。可以该方法实现方式虽说简单,但是存在很大的问题——界面虽然随左右滑动而切换了,但是实际所在的操作类还同一个(即在同一个Activity中),这一问题将导致程序的逻辑变得复杂时,界面控件变多时该Activity中实现的代码迅速的增加,最终将会使用程序后期维护、他人的阅读变得更加困难。
本篇将介绍如何实现几个独立的Activity之间实现滑动切换效果。 以下将讲述实现过程:
1.实现原理:ViewPager + ActivityGroup。
2.建立工程ViewPagerDemo2
编写的类有:MainActivity(主界面窗口)、MYPagerAdapter(和上篇讲述的一样),FirstActivity,SecondActivity,ThirdActivity(这三个对应上篇所讲的三个滑动切换界面)
编写的布局文件:main.xml,layout1.xml,layout2.xml,layout3.xml(这四个布局文件与上篇所讲完全一样)
本实例实现只有主界面窗口类与上篇所讲实现不同,这里的主界面窗口是继承自ActivityGroup,而非直接继承成Activity,其他类均一样,这里我们着重介绍该类的实现。
 这是上篇所讲的初始化ViewPager方法
 private void initViewPager(){
        ViewPager viewPager = (ViewPager)findViewById(R.id.viewPager);
View view1 = LayoutInflater.from(this).inflate(R.layout.layout1, null);
View view2 = LayoutInflater.from(this).inflate(R.layout.layout2, null);
View view3 = LayoutInflater.from(this).inflate(R.layout.layout3, null);
    
ArrayList<View> views = new ArrayList<View>();
views.add(view1);
views.add(view2);
views.add(view3);
    
MYViewPagerAdapter adapter = new MYViewPagerAdapter();
adapter.setViews(views);
viewPager.setAdapter(adapter);
   }
这是改进的初始化ViewPager方法:
 private void initViewPager(){
view1 = getLocalActivityManager().startActivity("activity01",  
                new Intent(this, FirstActivity.class)).getDecorView(); 
view2 = getLocalActivityManager().startActivity("activity02",  
                new Intent(this, SecondActivity.class)).getDecorView();
view3 = getLocalActivityManager().startActivity("activity03",  
                new Intent(this, ThirdActivity.class)).getDecorView();

    ArrayList<View> views = new ArrayList<View>();
views.add(view1);
views.add(view2);
views.add(view3);
     
MYViewPagerAdapter adapter = new MYViewPagerAdapter();
adapter.setViews(views);
viewPager.setAdapter(adapter);
   }
以上两段代码实现方式唯一不同的是得到子View的方式不同,第一种方法原理是:从一个布局文件得到一个最终的View,然后添加到ViewPager中,从而实现多页的效果,多个页面各自的逻辑将写在同一个类中进行操作,而第二种方法是通过ActivityGroup这个类,得到另一个独立Activity界面的根View,将其添加到ViewPager对象中去,每个View仍然保持有各自的独立的逻辑。
 
程序运行效果如下:



Android <wbr>实现多页界面左右滑动切换效果之进阶




Android <wbr>实现多页界面左右滑动切换效果之进阶


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值