Android进阶之ViewPager

来源:互联网 发布:大连大学宿舍有网络吗 编辑:程序博客网 时间:2024/05/29 06:53

今天在完成项目之后继续学习视频资料,由于后天就过年了,家里的事情越来越多,只能挤时间出来学习,相比预期进度有点差距,预期打算再把服务学习完毕,看来只能放在年后了,好了,不说废话,下面开始说今天学习的ViewPager。
首先明白ViewPager是什么,ViewPager就是用于实现在一个布局中,能够进行多个内容界面的切换,通过手指的滑动,可以让这些界面滑动的一种控件。
那么ViewPager如何使用呢?由于ViewPager是support-v4包下的一个控件,所以使用时必须导入v4包,可以直接在布局中使用,需要使用先相应Adapter来设置显示的内容,这一点有点类似于ListView,可以将它比作成横着的ListView。
ViewPager的简单实现需要借助于PagerAdapter这个类,用于ViewPager显示控件与界面。
由于涉及到页面的切换,这里说一下PagerAdapter的页面加载方式。
1.ViewPager当前页,左侧和右侧都已经加载当向一个方向移动的时侯,总是能够确保当前显示页面的左侧右侧都存在,因此,每次移动的时候,都会销毁超出的部分,最多显示加载三个页面,当前页、当前页面左右的页面。
2.相应的PageAdapter的调用,就会按照加载的顺序来调用
3.当当前页面显示0索引的时候,1代表的页面也会存在,当页面显示最后一个的时候,倒是第二个也会存在。
4.因为ViewPager需要平滑的移动左侧或者右侧的内容,所以预先加载右,类似于双缓冲原理
好了,下面直接上代码,代码实现了图片的切换以文字随着手的滑动而进行改变。由于还没有找到合适的屏幕录制软件就不上效果图了,如果诸位有好用,麻烦留言相告,谢谢!
下面是代码:
MainActivity.java代码:

public class MainActivity extends AppCompatActivity {    private ViewPager pager;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //获取Layout中的ViewPager        pager=(ViewPager)findViewById(R.id.main_view_pager);        //设置ViewPager的 Adapter,通过Adapter来显示内容        //代码中创建UI控件        PagerAdapter adapter =new WelcomeAdapter(this);        //参数类型为PagerAdapter        pager.setAdapter(adapter);    }}

PageAdapter代码:

public class WelcomeAdapter extends PagerAdapter {  //Ctrl + i 重写方法获取    //定义全局的上下文 alt + Fn + insert   private Context context;    public WelcomeAdapter(Context context) {        this.context = context;    }    /**     * 代表ViewPager一共显示多少页     * @return     */    @Override    public int getCount() {        //想显示多少就写多少 这里写十个        return 10;    }    //使用第一个,加横线表示过时了    /**     * 创建每一个页面,当View要加载的时候,进行创建     * @param container     * @param position     * @return 通常返回的就是要创建的View     */    @Override    public Object instantiateItem(ViewGroup container, int position) {        View ret=null;        //代码创建UI控件 参数为上下文//        TextView textView=new TextView(context);//        textView.setText("页面:" + position);//        textView.setTextColor(Color.RED);//        //设置字体的属性30sp,两个参数,指定单位//        textView.setTextSize(TypedValue.COMPLEX_UNIT_SP,30);//        //本方法,不会自动的将创建的View添加到ViewPager//        //必须手动添加//        //将其添加到ViewPager//        container.addView(textView);//        //最终返回TextView//        ret =textView;        //进行图片的显示        ImageView imageView=new ImageView(context);        imageView.setImageResource(R.drawable.myself);        //可以根据Position进行判断,显示不同的图片        //从而实现漫画、欢迎页的功能        //必须要添加        container.addView(imageView);        //最后忘记进行赋值,用于每一个页面的显示        ret=imageView;        return ret;    }    /**     * 当每一次ViewPager页面已经移出去,并且需要销毁的时候     * 会自动把instantiateItem()创建的对象消除     * @param container     * @param position     * @param object  就是instantiateItem的返回值     */    @Override    public void destroyItem(ViewGroup container, int position, Object object) {        if(object instanceof View)        {            View v=(View) object;            //使用PageAdapter时候不会自动删除控件,需要手动删除            container.removeView(v);        }    }     //ctrl + O 选择重写方法    /**     * 来判断View参数指定的对象,是否是从Object出来的     * @param view     * @param object     * @return     */    @Override    public boolean isViewFromObject(View view, Object object) {        return view==object;    }}

activity_mian.xml代码:

<!-- 自定义控件或者第三方控件,注意标签名-->    <!-- 可以可能做是一个容器,显示内容需要代码来做-->   <android.support.v4.view.ViewPager       android:id="@+id/main_view_pager"       android:layout_width="match_parent"       android:layout_height="match_parent">   </android.support.v4.view.ViewPager></LinearLayout>

这样便实现了一个简单的ViewPager,至于效果,自己去体验吧,别忘记将我的图片资源进行替换呢!!!

0 0