Android:ViewPager控件

214 阅读2分钟

image.png

ViewPager

对于ViewPager官方的描述就是页面允许左右滑动的布局管理器,而不同页面带有不同的数据。

页面设置:

<androidx.viewpager.widget.ViewPager
 android:id="@+id/viewPager"
 android:layout_width="match_parent"
 android:layout_height="wrap_content">
 <androidx.viewpager.widget.PagerTabStrip
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:padding="18dp"
     android:id="@+id/pagerTab">

 </androidx.viewpager.widget.PagerTabStrip>
</androidx.viewpager.widget.ViewPager>

ViewPager的应用也都需要用到适配器来加载数据。

适配器:

package com.example.myuibasecontrol.Adapter;

import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import java.util.List;

public class PagerAdapter extends androidx.viewpager.widget.PagerAdapter {
    private List<View> viewList;
    private List<String> titlelist;

    public PagerAdapter(List<View> viewList, List<String> titlelist) {
        this.viewList = viewList;
        this.titlelist = titlelist;
    }

    /**
     * 返回页卡的数量
     * @return
     */
    @Override
    public int getCount() {
//        return viewList.size();
        return Integer.MAX_VALUE;
    }

    /**
     * 判断View是否来自对象
     * @param view      视图
     * @param object    对象
     * @return
     */
    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
        return view==object;
    }

    /**
     * 实例化一个页卡
     * @param container  容器
     * @param position    位置
     * @return
     */
    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
       container.addView(viewList.get(position));
       return viewList.get(position);
    }

    /**
     * 销毁页卡
     * @param container
     * @param position
     * @param object
     */
    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        container.removeView(viewList.get(position));
    }

    /**
     * 返回页卡标题的信息,要实现一定在布局文件里一定要有PageTabStrip
     * @param position
     * @return
     */
    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        return titlelist.get(position);
    }
}

下面就是设置数据和怎么将数据加载到适配器里面去: 数据源中的layout文件是自定义的。可以根据项目要求和自己喜好设置。

package com.example.myuibasecontrol;

import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.PagerTabStrip;
import androidx.viewpager.widget.ViewPager;

import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

import com.example.myuibasecontrol.Adapter.PagerAdapter;

import java.util.ArrayList;
import java.util.List;

public class MainActivity8 extends AppCompatActivity implements ViewPager.OnPageChangeListener {

    private ViewPager viewPager;
    private PagerTabStrip pagerTabStrip;
    private List<View> viewList;
    private List<String> titlelist;

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

        viewPager=findViewById(R.id.viewPager);
        pagerTabStrip=findViewById(R.id.pagerTab);

        viewList=new ArrayList<>();
        titlelist=new ArrayList<>();

//        1.数据源,通过View对象作为Viewpage的数据
        View view=View.inflate(this,R.layout.view1,null);
        viewList.add(view);
        View view2=View.inflate(this,R.layout.view2,null);
        viewList.add(view2);
        View view3=View.inflate(this,R.layout.view3,null);
        viewList.add(view3);
        View view4=View.inflate(this,R.layout.view4,null);
        viewList.add(view4);

//        2.tab的数据
        titlelist.add("第一页");
        titlelist.add("第二页");
        titlelist.add("第三页");
        titlelist.add("第四页");

//        3.修改tab的样式
        pagerTabStrip.setBackgroundColor(Color.GRAY);//背景颜色
        pagerTabStrip.setTextColor(Color.WHITE);//字体颜色
        pagerTabStrip.setTabIndicatorColor(Color.BLUE);//设置标签指示颜色

//        4.创建PagerAdapter适配器,加载数据List<View>
        PagerAdapter adapter=new PagerAdapter(viewList,titlelist);
//        5.加载适配器
        viewPager.setAdapter(adapter);
//        6.设置监听器
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            }

            @Override
            public void onPageSelected(int position) {
                Toast.makeText(MainActivity8.this, "当前页面是第"+(position+1)+"页", Toast.LENGTH_SHORT).show();

            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

    }


    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {

    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }
}

tutieshi_352x672_20s.gif

学会缩小自己的情绪,拓宽自己的眼界,所有的人都成长的十分不易,一步步走来十分艰辛,克服恐惧与难题的唯一办法就是:直面问题的本质