zoukankan      html  css  js  c++  java
  • Android:ViewPager实现屏幕轮转和使用PagerTabStrip

      ① ViewPager类直接继承了ViewGroup类,所有它是一个容器类,可以在其中添加其他的view类。

      ② ViewPager类需要一个PagerAdapter适配器类给它提供数据。

      ③ ViewPager经常和Fragment一起使用,并且提供了专门的FragmentPagerAdapter和FragmentStatePagerAdapter类供Fragment中的ViewPager使用。

       在编写ViewPager的应用的使用,还需要使用两个组件类分别是PagerTitleStrip类和PagerTabStrip类,PagerTitleStrip类直接继承自ViewGroup类,而PagerTabStrip类继承PagerTitleStrip类,所以这两个类也是容器类。但是有一点需要注意,在定义XML的layout的时候,这两个类必须是ViewPager标签的子标签,不然会出错。

    activity_main.xml

    <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/viewpager"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
            <android.support.v4.view.PagerTabStrip
                android:id="@+id/viewpager_tab"
                android:layout_width="wrap_content"
                android:layout_height="50dp"
                android:background="#ffe66f"
                >
            </android.support.v4.view.PagerTabStrip>
    
        </android.support.v4.view.ViewPager>
    </RelativeLayout>

    MainActivity.java

       里面有很详细的注释,我就不在这赘述了.

    package com.example.administrator.viewpagerdemo;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.support.v4.view.PagerAdapter;
    import android.support.v4.view.PagerTabStrip;
    import android.support.v4.view.PagerTitleStrip;
    import android.support.v4.view.ViewPager;
    import android.view.LayoutInflater;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.ViewGroup;
    
    import java.util.ArrayList;
    import java.util.List;
    
    
    public class MainActivity extends Activity {
    
        private ViewPager viewPager = null;
        private PagerTabStrip pagerTabStrip = null;  //导航条
    
        private List<View> viewContainter = new ArrayList<View>();   //存放容器
        private List<String> tabContainter = new ArrayList<String>();   //存放 tab导航
    
        private ViewPagerAdapter viewPagerAdapter;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            // 绑定组件
            viewPager = (ViewPager) findViewById(R.id.viewpager);
            pagerTabStrip = (PagerTabStrip) findViewById(R.id.viewpager_tab);
            pagerTabStrip.setTextColor(getResources().getColor(R.color.black));  //设置 字体颜色
            //取消Tab 下面的长横线
            pagerTabStrip.setDrawFullUnderline(false);
            //设置每个Tab的下划线颜色
            pagerTabStrip.setTabIndicatorColor(getResources().getColor(R.color.red));
            pagerTabStrip.setTextSize(0,40);
            pagerTabStrip.setTextSpacing(10);
    
            //建立四个view的样式,并找到他们
            View view_1 = LayoutInflater.from(getApplicationContext()).inflate(R.layout.viewpager_view_1,null);
            View view_2 = LayoutInflater.from(getApplicationContext()).inflate(R.layout.viewpager_view_2,null);
            View view_3 = LayoutInflater.from(getApplicationContext()).inflate(R.layout.viewpager_view_3,null);
            View view_4 = LayoutInflater.from(getApplicationContext()).inflate(R.layout.viewpager_view_4,null);
            //加入ViewPage的容器
            viewContainter.add(view_1);
            viewContainter.add(view_2);
            viewContainter.add(view_3);
            viewContainter.add(view_4);
            //想Tab容器中加入标签
            tabContainter.add("最近");
            tabContainter.add("今天");
            tabContainter.add("明天");
            tabContainter.add("后天");
    
            //初始化viewPagerAdapter
            viewPagerAdapter = new ViewPagerAdapter();
            //设置adapter
            viewPager.setAdapter(viewPagerAdapter);
           
        }
        //viewpager的适配器
        private class ViewPagerAdapter extends PagerAdapter{
    
    
    
            //该方法 决定 并 返回 viewpager中组件的数量
            @Override
            public int getCount() {
                return viewContainter.size();
            }
    
            @Override
            public boolean isViewFromObject(View view, Object o) {
                return view == o;
            }
            //滑动切换的时候,消除当前组件
            @Override
            public void destroyItem(ViewGroup container, int position, Object object) {
                container.removeView(viewContainter.get(position));
            }
            //每次滑动的时候生成的组件
            @Override
            public Object instantiateItem(ViewGroup container, int position) {
                container.addView(viewContainter.get(position));
                return viewContainter.get(position);
            }
            //设置Tab
            @Override
            public CharSequence getPageTitle(int position) {
                return tabContainter.get(position);
            }
        }
    
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.menu_main, menu);
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
    
            //noinspection SimplifiableIfStatement
            if (id == R.id.action_settings) {
                return true;
            }
    
            return super.onOptionsItemSelected(item);
        }
    }

    我们还需要建立四个View的布局文件,里面就放了一个ImageView,并且指定了背景,在这里我就贴出来一个布局文件的代码(其他的都一样)

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <ImageView
            android:id="@+id/viewpager_view_image_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/image1"/>
    </LinearLayout>

    效果图:

    对于PagerAdapter类,android的文档已经说的很清楚了,必须至少实现如下的4个方法,如果需要更好的扩展也可以实现更多的方法。

    public Object instantiateItem(ViewGroup container, int position)

    public void destroyItem(ViewGroup container, int position,Object object) 

    public int getCount()

    public boolean isViewFromObject(View arg0, Object arg1) 

  • 相关阅读:
    ASP.NET CORE 使用Consul实现服务治理与健康检查(2)——源码篇
    ASP.NET CORE 使用Consul实现服务治理与健康检查(1)——概念篇
    Asp.Net Core 单元测试正确姿势
    如何通过 Docker 部署 Logstash 同步 Mysql 数据库数据到 ElasticSearch
    Asp.Net Core2.2 源码阅读系列——控制台日志源码解析
    使用VS Code 开发.NET CORE 程序指南
    .NetCore下ES查询驱动 PlainElastic .Net 升级官方驱动 Elasticsearch .Net
    重新认识 async/await 语法糖
    EF添加
    EF修改部分字段
  • 原文地址:https://www.cnblogs.com/819158327fan/p/4775512.html
Copyright © 2011-2022 走看看