Viewpager以及ViewPagerIndicator的相关使用

ViewPagerIndicator开源框架可以用来在ViewPager上方做标题,可以在ViewPager下方做跟随移动的小圆点,这个类库必须和自己的项目在电脑的同一磁盘盘符下,比如都在D盘或者E盘,下载这个开源框架后一般有类库和例子程序,然后自己的项目引入这个类库,这时会出现的问题是,自己的项目的V4包和ViewPagerIndicator的V4包产生冲突,解决办法是:在自己项目的libs目录下删除V4包,进入到文件目录下使用360强力删除,即可解决V4包冲突问题

  

  第一个例子,在ViewPager上方添加标题:,每个ViewPager的界面都是一个Fragment

  这是Activity的布局:

<LinearLayout 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"
    android:orientation="vertical"
    android:background="#fff"
    tools:context=".MainActivity" >
  //ViewPager上的标题
    <com.viewpagerindicator.TabPageIndicator
        android:id="@+id/indicator"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#fff"  //标题背景为白色
        />

    <android.support.v4.view.ViewPager
        android:id="@+id/vp"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </android.support.v4.view.ViewPager>

</LinearLayout>

MainActivity里面的代码:

public class MainActivity extends FragmentActivity {

    private ViewPager vp;
    //用来装3个切换的View
    private List<View> list=new ArrayList<View>();
    private String titles[]=new String[]{"1111标题1    ","2222标题","3333标题3    ","4444标题4"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        vp = (ViewPager) findViewById(R.id.vp);

        vp.setAdapter(new MyAdapter(getSupportFragmentManager()));

        TabPageIndicator indicator=(TabPageIndicator) findViewById(R.id.indicator);
        indicator.setViewPager(vp);//把TabPageIndicator标题 和ViewPager关联起来
    }
    class MyAdapter extends FragmentPagerAdapter{

        public MyAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            Fragment1 fragment1 = new Fragment1(position);
            return fragment1;
        }

        @Override
        public int getCount() {
            return titles.length;
        }
        //返回标题
        @Override
        public CharSequence getPageTitle(int position) {
            String title = titles[position];
            return title;
        }
    }
}

这是Fragment里的代码:

//这一个Fragment,但是会用四次,每次的布局都不同
public class Fragment1 extends Fragment {
    public int postion;
    //四个布局Id
    private int[] layouts=new int[]{R.layout.vp_1,R.layout.vp_2,R.layout.vp_3,R.layout.vp_4};
    public Fragment1(){

    };
    public Fragment1(int position){
        this.postion=position;
        System.out.println("创建Fragment");
    }
    //此方法用于创建Fragment的布局
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = initView(postion);
        return view;
    }

    public View initView(int positon) {
        View view = View.inflate(getActivity(), layouts[positon], null);
        return view;
    }
}

此时运行程序时,发现并不是Simple例子中的效果,自己写的项目里标题都是挤在一起的,然后发现,是和Simple里Activity的Theme不同,所以在清单文件中配置本Activity时加上了这个主题     android:theme="@style/Theme.PageIndicatorDefaults"

这样,标题就和例子程序一样好看了,如果要加上一些个性化的标题样式,那么就把@style/Theme.PageIndicatorDefaults这个主题进行更改;

结果图:

  二:在ViewPager下方添加移动的小圆点

主界面布局:整个界面都是ViewPager,小圆点是与父控件底部对齐

<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=".MainActivity" >

    <android.support.v4.view.ViewPager
        android:id="@+id/vp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
    </android.support.v4.view.ViewPager>

    <com.viewpagerindicator.CirclePageIndicator
        android:layout_alignParentBottom="true"
        android:id="@+id/indicator"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp" />

</RelativeLayout>

MainActivity代码:

public class MainActivity extends FragmentActivity {

    private ViewPager vp;
    //三张图片的资源ID
    private int[] imageIds=new int[]{R.drawable.guide_1,R.drawable.guide_2,R.drawable.guide_3};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        vp = (ViewPager) findViewById(R.id.vp);
        vp.setAdapter(new MyAdapter());

        CirclePageIndicator mIndicator = (CirclePageIndicator)findViewById(R.id.indicator);
        mIndicator.setViewPager(vp);//把圆点和ViewPager关联起来

    }
    class MyAdapter extends PagerAdapter{

        @Override
        public int getCount() {
            return imageIds.length;
        }

        @Override
        public boolean isViewFromObject(View arg0, Object arg1) {
            return arg0==arg1;
        }
        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            ImageView imageView = new ImageView(MainActivity.this);

            imageView.setImageResource(imageIds[position]);
            container.addView(imageView);//把imageView添加到父容器中

            return imageView;
        }
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View) object);
        }

    }
}

发现还是没有想要的效果,那么就是theme的问题,到清单文件中为本Activity加一个Theme-->    android:theme="@style/StyledIndicators

这个主题是在自己项目中建立的,然后把Sample中的那个Activity的主题代码拷贝过来,相应的状态选择器以及资源图片,缺什么拷什么,也可以自己进行相应的修改,形成自己的风格

运行结果图:

以上就是关于ViewPager添加标题,已经ViewPager添加移动圆点。

时间: 2024-10-10 05:39:42

Viewpager以及ViewPagerIndicator的相关使用的相关文章

Android之实现ViewPagerIndicator

PS:最近一直忙于学习任务,一直没有时间去写博客.今天周六,终于有时间了. 学习任务: 1.打造一个自己的ViewPagerIndicator   最近被安排了一大堆的学习任务,感觉老板还是很好的,让我们在业余时间多提升自己的个人能力,就拿这个ViewPagerIndicator来说吧,当初自己没有什么好的实现方案,现在也就学了一发,看了一下Google上的实现方案,针对的情况比较的多,我这里就针对一种情况来说.大家想更深入的研究可以去Github上搜索一下Google工程师的实现方式,效果都很

Android 实现带指示器的自动轮播式ViewPager

前言 最近在做项目的时候,有个需求就是实现自动轮播式的ViewPager,最直观的例子就是知乎日报顶部的ViewPager,它内部有着好几个子view,每个一段时间便自动滑动到下一个item view,而底部的指示器也随之跟着改变.使用这种ViewPager的好处是在有限的空间内可以展示出多样化的信息.轮播式ViewPager广泛应用于各种应用内部,用于展示广告等.抱着学习和分享的目的,笔者把轮播式ViewPager写成了一个独立的控件,以方便以后的使用. 效果展示 话不多说,我们先来看看实现的

自定义ViewpagerIndicator (仿猫眼,添加边缘回弹滚动效果)

一.概述 今天主要来分享个自定义viewpagerindicator,效果主要是仿 猫眼电影 顶部的栏目切换,也就是我们常说的indicator,难度简单,为了让滑动时效果更炫酷,我在滑动到左边第一个item或者最右边的item时,添加了滑动到边缘位置后,回弹然后复位的效果(其实也是很简单,只要计算好距离就好啦) 大致的效果图就是这样.大家可以凑合看看(可以看到当滑动到边缘位置的时候有回弹的效果,是不是挺带感的O(∩_∩)O) 二.使用方法 layout布局 <LinearLayout xmln

ViewPagerIndicator的使用方法

ViewPagerIndicator 使用方法: 1.引用library,并解决support v4 jar包冲突 2.布局文件中添加viewpager和viewpagerindicator <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_w

自己定义ViewpagerIndicator (仿猫眼,加入边缘回弹滚动效果)

一.概述 今天主要来分享个自己定义viewpagerindicator.效果主要是仿 猫眼电影 顶部的栏目切换.也就是我们常说的indicator,难度简单,为了让滑动时效果更炫酷,我在滑动到左边第一个item或者最右边的item时,加入了滑动到边缘位置后,回弹然后复位的效果(事实上也是非常easy,仅仅要计算好距离就好啦) 大致的效果图就是这样. 大家能够凑合看看(能够看到当滑动到边缘位置的时候有回弹的效果,是不是挺带感的O(∩_∩)O) 二.用法 layout布局 <LinearLayout

巧用ViewPager 打造不一样的广告轮播切换效果

一.概述 如果大家关注了我的微信公众号的话,一定知道我在5月6号的时候推送了一篇文章,文章名为Android超高仿QQ附近的人搜索展示(一),通过该文可以利用ViewPager实现单页显示多个Item且能够添加一些炫酷的动画效果.我当时阅读这篇文章的时候,简单做了下记录,然后想了想,可以按照该思路做一个比较特殊轮播效果,如图: 其实看到这个大家肯定不陌生,对于ViewPager切换有个很出名的库叫JazzViewPager,没错,我又跑了下JazzyViewPager的例子,看看有什么动画效果可

viewpager 禁用滑到两边的颜色

与listview不同的是:fadeingedge=none即可. viewpager则更加复杂一点. 先看下ViewPager中和这个颜色相关的代码: private EdgeEffectCompat mLeftEdge; private EdgeEffectCompat mRightEdge; 就是这俩货,导致的边界颜色.没办法,这货是private的,后面只能通过反射来得到了. 再看下draw()方法中的逻辑: @Override public void draw(Canvas canva

ViewPager动画详解

GitHub:lightSky 微博:    light_sky, 即时分享最新技术,欢迎关注 前言 前两天看到鲍永章分享的Great animations with PageTransformer以及农民伯伯分享的Create ViewPager transitions 文章,都是通过ViewPager来实现酷炫的动画,而现在的App中ViewPager的动画使用也非常的广泛.正好最近一直研究动画,那么就趁热打铁,分析一下相关的开源库吧.本篇文章介绍的ViewPager动画,可以分为两类,第一

Android 模仿搜狐新闻的ViewpagerIndicator

好久没写博客了,今天没事怒更一记. 如标题今天我们来模仿一下搜狐新闻,先上个效果图. 效果图上完之后再上个博客,我也是从这里得到的启发http://blog.csdn.net/qibin0506/article/details/42046559 1,接下来我们就来分析一下这个效果 下面的内容应该是用viewpager,头部的选项卡我们用一个LinearLayout+HorizontalScrollView也可以实现,滚动效果的话我们可以用到我们学会的scrollTo,大致的思路理清,我们就开始码