Android控件--ViewPager导航 效果

Android控件–ViewPager

1.ViewPager是用来干什么的

	ViewPager是多个视图的管理者

2.ViewPager常用效果

	1.引导界面,相册多图片预览
	2.多Tab页面,App导航
	3.广告播放

3.应用背景

	1.android.support.v4.view.ViewPager

4.效果演示

a.引导界面

	public class ViewPagerActivity extends AppCompatActivity {


/***
 * 1.布局文件中创建viewpager控件
 * 2.创建视图数组(初始化数据)
 * 3.设置adapter
 * 4.设置指示器
 */
private List<View> views = new ArrayList<>();

private ViewPager viewPager;
//视图数组
private int [] layoutIDs = {R.layout.onetext,R.layout.twotext,R.layout.threetext};
//设置指示器
private List<ImageView> dotview = new ArrayList<>();
private ViewGroup dotviewgroup;
private ImageView dotimage;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_view_pager);
     viewPager = findViewById(R.id.viewpager);
    dotviewgroup = findViewById(R.id.dot);
    for (int i = 0; i < layoutIDs.length; i++) {
        views.add(getLayoutInflater().inflate(layoutIDs[i],null));
        //设置指示器--------------------------------------------
        dotimage = new ImageView(this);
        dotimage.setImageResource(R.mipmap.ic_launcher);
        //指示器最大宽高
        dotimage.setMaxHeight(100);
        dotimage.setMaxWidth(100);

        //设置LinearLayout里面的点宽高
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(80,80);
        //每个都距左边20
        layoutParams.leftMargin = 20;
        //把前面设置的设置到图片上
        dotimage.setLayoutParams(layoutParams);
        //使控件不响应点击触摸事件
        dotimage.setEnabled(false);
        dotviewgroup.addView(dotimage);
        dotview.add(dotimage);
        //---------------------------------------------
    }

    //设置缓存多少张
    viewPager.setOffscreenPageLimit(3);
    //进入的时候显示第一页
    viewPager.setCurrentItem(0);
    //设置第一个指示器
    setdotview(0);
    viewPager.setAdapter(pagerAdapter);
    //监听每一页被改变的时候
    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }
        //设置当前视图的指示器变化

        @Override
        public void onPageSelected(int position) {
            setdotview(position);
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

}

//设置当前页面显示指示器对应位置
private void setdotview(int position) {
    for (int i = 0; i < dotview.size(); i++) {
        dotview.get(i).setImageResource(position == i ? R.mipmap.head : R.mipmap.ic_launcher);
    }
}

PagerAdapter pagerAdapter = new PagerAdapter() {
    //总共多少页
    @Override
    public int getCount() {
        return layoutIDs.length;
    }
    //instantiateItem返回的视图是不是和当前的视图一样 就可以复用了
    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }
    //把每次的视图添加进去
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        //找到当前的视图
        View chil = views.get(position);
        //添加到显示
        container.addView(chil);
        return chil;

    }
    //销毁释放 默认缓存3张
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView(views.get(position));
    }
};

}

b.导航页

b.1 主页面

public class TabViewPagerActivity extends AppCompatActivity implements TabHost.TabContentFactory{
/**
* fragmentViewPager
* 1.布局中添加ViewPager
* 2.创建三个fragment设置到viewpage里
* 3.创建三个tab
* 4.tab和viewpage互相关联
* @param savedInstanceState
*/

private ViewPager viewPager;
private TabHost tabHost;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_tab_view_pager);
    viewPager = findViewById(R.id.tab_viewpager);
    //初始化Tab导航栏 Alt+Enter创建string
    tabHost = findViewById(R.id.tab_host);
    tabHost.setup();
    //三个Tab
    int[] titleIDs = {R.string.home,R.string.messge,R.string.me};
    int[] srcIDs = {R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher};
    //数据和视图相结合 这里只创建了一个tab的视图 使用循环把三个数据加载进去
    for (int i = 0; i < titleIDs.length ; i++) {
        View view = getLayoutInflater().inflate(R.layout.one_tab,null,false);
        ImageView src = view.findViewById(R.id.one_image);
        TextView text = view.findViewById(R.id.one_text);
        src.setImageResource(srcIDs[i]);
        text.setText(titleIDs[i]);
        //设置tab
        tabHost.addTab(tabHost.newTabSpec(getString(titleIDs[i]))
                //设置分割线
                .setIndicator(view)
                .setContent(this)
        );
    }



    //三个fragment
    final Fragment[] fragments = new Fragment[]{Testfragment.newInstance(0),Testfragment.newInstance(1),Testfragment.newInstance(2)};
    viewPager.setOffscreenPageLimit(fragments.length);
    viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
        @Override
        public Fragment getItem(int position) {
            return fragments[position];
        }

        @Override
        public int getCount() {
            return fragments.length;
        }
    });
    //切换效果
    //viewpager和tab互动
    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }
        //滑动的时候设置当前的tab
        @Override
        public void onPageSelected(int position) {
        if(tabHost != null){
            tabHost.setCurrentTab(position);
        }
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });
    //tab和viewpager的互动
    tabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {
        @Override
        public void onTabChanged(String tabId) {
            if(tabHost!= null){
                int position = tabHost.getCurrentTab();
                viewPager.setCurrentItem(position);
            }


        }
    });

}

//实现接口 创建TAB的content
@Override
public View createTabContent(String tag) {
    View view = new View(this);
    //隐藏
    view.setMinimumHeight(0);
    view.setMinimumWidth(0);
    return view;
}

}

b.2主页面布局

<?xml version="1.0" encoding="utf-8"?>

<android.support.constraint.ConstraintLayout xmlns:android=“http://schemas.android.com/apk/res/android
xmlns:app=“http://schemas.android.com/apk/res-auto
xmlns:tools=“http://schemas.android.com/tools
android:layout_width=“match_parent”
android:layout_height=“match_parent”
tools:context=“com.example.viewpagerdome.TabViewPagerActivity”>

<TabHost
    android:id="@+id/tab_host"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#f8f8f8"
    android:orientation="vertical"
    >
<RelativeLayout
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    >
<android.support.v4.view.ViewPager
    android:id="@+id/tab_viewpager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
</android.support.v4.view.ViewPager>
    <FrameLayout
        android:id="@android:id/tabcontent"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone"
        android:layout_above="@+id/tab_divider"
        >

    </FrameLayout>

    <View
        android:id="@+id/tab_divider"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_above="@android:id/tabs"
        android:background="#dfdfdf"
        />

    <TabWidget
        android:id="@android:id/tabs"
        android:layout_width="match_parent"
        android:layout_height="120dp"
        android:layout_alignParentBottom="true"
        android:showDividers="none"
        >

    </TabWidget>

</RelativeLayout>
</TabHost>

b.3 fragment 页面(布局就是正常布局只有一个text)

public class Testfragment extends android.support.v4.app.Fragment {

private String mposition;
private static final String POSITION = "position" ;

public static Testfragment newInstance(int position){

    Testfragment testfragment = new Testfragment();
    Bundle bundle = new Bundle();
    bundle.putInt(POSITION,position);
    testfragment.setArguments(bundle);
    return testfragment;
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null){
        mposition = String.valueOf(getArguments().getInt(POSITION));
    }
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = getLayoutInflater().inflate(R.layout.fragment_text,null);
    TextView textView = view.findViewById(R.id.fragment_text);
    textView.setText(mposition);
    return view;
}

}

猜你喜欢

转载自blog.csdn.net/weixin_43609490/article/details/87781929