Android笔记系列--ViewPager

XML布局文件

PagerTitleStrip:页面标题,重写适配器的getPageTitle()函数设置标题文字。

PagerTabStrip:跟PagerTitleStrip用法相同。

有两点不同:
1. PagerTabStrip在当前页面下,会有一个下划线条来提示当前页面的Tab是哪个。
2. PagerTabStrip的Tab是可以点击的,当用户点击某一个Tab时,当前页面就会跳转到这个页面,而PagerTitleStrip则没这个功能。

PagerTabStrip 可以修改显示属性
- 更改下划线颜色:pagerTabStrip.setTabIndicatorColorResource(R.color.green);
- 添加带图片的标题 SpannableStringBuilder

@Override 
public CharSequence getPageTitle(int position) { 
    SpannableStringBuilder ssb = new SpannableStringBuilder("  "+titleList.get(position)); // space added before text
    Drawable myDrawable = getResources().getDrawable( 
            R.drawable.ic_launcher); 
    myDrawable.setBounds(0, 0, myDrawable.getIntrinsicWidth(), 
            myDrawable.getIntrinsicHeight()); 
    ImageSpan span = new ImageSpan(myDrawable, 
            ImageSpan.ALIGN_BASELINE); 

    ForegroundColorSpan fcs = new ForegroundColorSpan(Color.GREEN);// 字体颜色设置为绿色 
    ssb.setSpan(span, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);// 设置图标 
    ssb.setSpan(fcs, 1, ssb.length(), 
            Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);// 设置字体颜色 
    ssb.setSpan(new RelativeSizeSpan(1.2f), 1, ssb.length(), 
            Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
    return ssb; 
} 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.example.testviewpage_2.MainActivity" > 

    <android.support.v4.view.ViewPager 
        android:id="@+id/viewpager" 
        android:layout_width="wrap_content" 
        android:layout_height="200dip" 
        android:layout_gravity="center"> 

        <!-- <android.support.v4.view.PagerTabStrip -->
        <android.support.v4.view.PagerTitleStrip 
            android:id="@+id/pagertitle"   
            android:layout_width="wrap_content"   
            android:layout_height="wrap_content"   
            android:layout_gravity="top" 
            /> 

    </android.support.v4.view.ViewPager> 

</RelativeLayout>

PagerAdapter 或 FragmentPagerAdapter

PagerAdapter

PagerAdapter pagerAdapter = new PagerAdapter() { 

    @Override 
    public boolean isViewFromObject(View arg0, Object arg1) {
        //根据传来的key,找到view,判断与传来的参数View arg0是不是同一个视图 
        return arg0 == viewList.get((int)Integer.parseInt(arg1.toString())); 
    } 

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

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView(viewList.get(position)); 
    } 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
        container.addView(viewList.get(position)); 

        //把当前新增视图的位置(position)作为Key传过去 
        return position; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) {
        switch (position) { 
            case 0: 
                return "王鹏"; 
            case 1: 
                return "姜语"; 
            case 2: 
                return "结婚";
            default: 
                return ""; 
        }   
    } 
}; 
viewPager.setAdapter(pagerAdapter);

FragmentPagerAdapter

//构造适配器 
List<Fragment> fragments=new ArrayList<Fragment>(); 
fragments.add(new Fragment1()); 
fragments.add(new Fragment2()); 
fragments.add(new Fragment3());  
FragAdapter adapter = new FragAdapte(getSupportFragmentManager(), fragments); 

//设定适配器 
ViewPager vp = (ViewPager)findViewById(R.id.viewpager); 
vp.setAdapter(adapter);
vp.setCurrentItem(0);

public class FragAdapter extends FragmentPagerAdapter { 

    private List<Fragment> mFragments; 

    public FragAdapter(FragmentManager fm,List<Fragment> fragments) { 
        super(fm); 
        // TODO Auto-generated constructor stub 
        mFragments=fragments; 
    } 

    @Override 
    public Fragment getItem(int arg0) { 
        // TODO Auto-generated method stub 
        return mFragments.get(arg0); 
    } 

    @Override 
    public int getCount() { 
        // TODO Auto-generated method stub 
        return mFragments.size(); 
    } 

}

页面切换监听

viewPager.setOnPageChangeListener(new MyPageChangeListener());

//页面改变监听器 
public class MyPageChangeListener implements OnPageChangeListener { 

    int one = offset * 2 + bmpw;// 页卡1 -> 页卡2 偏移量 
    int two = one * 2;// 页卡1 -> 页卡3 偏移量 

    @Override 
    public void onPageSelected(int arg0) { 
        Animation animation = null; 
        switch (arg0) { 
        case 0: 
            if (currIndex == 1) { 
                animation = new TranslateAnimation(one, 0, 0, 0); 
            } else if (currIndex == 2) { 
                animation = new TranslateAnimation(two, 0, 0, 0); 
            } 
            break; 
        case 1: 
            if (currIndex == 0) { 
                animation = new TranslateAnimation(offset, one, 0, 0); 
            } else if (currIndex == 2) { 
                animation = new TranslateAnimation(two, one, 0, 0); 
            } 
            break; 
        case 2: 
            if (currIndex == 0) { 
                animation = new TranslateAnimation(offset, two, 0, 0); 
            } else if (currIndex == 1) { 
                animation = new TranslateAnimation(one, two, 0, 0); 
            } 
            break; 
        } 
        currIndex = arg0; 
        animation.setFillAfter(true);// True:图片停在动画结束位置 
        animation.setDuration(300); 
        cursor.startAnimation(animation); 
    } 

    @Override 
    public void onPageScrolled(int arg0, float arg1, int arg2) { 
    } 

    @Override 
    public void onPageScrollStateChanged(int arg0) { 
    } 
}

Fragment中嵌套viewpager

一般都是使用getActivity().getSupportFragmentManager()

mPager.setAdapter(new MyFragmentPagerAdapter(getActivity().getSupportFragmentManager(), fragmentsList));

但是Fragment中嵌套viewpager,viewpager里面又使用Fragment做页面切换情况下需要使用getActivity().getChildFragmentManager()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

繁星点点-

请我喝杯咖啡呗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值