您的位置:首页 > 移动开发 > Android开发

Android:ViewPager实现屏幕轮转和使用PagerTabStrip

2015-09-01 13:54 711 查看
① 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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: