先看效果图:
写了6个title 分别对应6个fragment,现在title只是一个textView , 当然title 是一个布局,想写出啥样就啥样。不废话直接上代码:
首先6个Fragmnet的代码很简单,值显示了布局,代码如下:
<span style="font-size:18px;">public class Fragment11 extends MyBaseFragment1{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragmeng1_f1, null);
return view;
}
@Override
public void onPause() {
super.onPause();
}
}
</span>
<span style="font-size:18px;">public class Fragment22 extends MyBaseFragment1{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragmeng2_f2, null);
return view;
}
@Override
public void onPause() {
super.onPause();
}
}</span>
.......<span style="font-size:18px;">public class Fragment66 extends MyBaseFragment1{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragmeng6_f6, null);
return view;
}
@Override
public void onPause() {
super.onPause();
}
}</span>
<span style="font-size:18px;">对应的布局,由于都差不多就不全贴出来了:</span>
<pre name="code" class="java"><span style="font-size:18px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/darkcyan"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Fragment2"/>
</RelativeLayout>
</span>
</pre><span style="font-size:18px;">然后Activity的布局文件如下:</span>
<pre name="code" class="java"><span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="800dp"
android:layout_height="80dp"
android:layout_centerHorizontal="true"
android:layout_marginTop="10dp" >
<TextView
android:id="@+id/title0"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:background="@drawable/textview_bg"
android:gravity="center"
android:text="title 1"
android:textColor="#ffffffff"
android:textSize="20sp" />
<TextView
android:id="@+id/title1"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:background="@drawable/textview_bg"
android:gravity="center"
android:text="title 2"
android:textColor="#ffffffff"
android:textSize="20sp" />
<TextView
android:id="@+id/title2"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:background="@drawable/textview_bg"
android:gravity="center"
android:text="title 3"
android:textColor="#ffffffff"
android:textSize="20sp" />
<TextView
android:id="@+id/title3"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:background="@drawable/textview_bg"
android:gravity="center"
android:text="title 4"
android:textColor="#ffffffff"
android:textSize="20sp" />
<TextView
android:id="@+id/title4"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:background="@drawable/textview_bg"
android:gravity="center"
android:text="title 5"
android:textColor="#ffffffff"
android:textSize="20sp" />
<TextView
android:id="@+id/title5"
android:layout_width="150dp"
android:layout_height="fill_parent"
android:background="@drawable/textview_bg"
android:gravity="center"
android:text="title 6"
android:textColor="#ffffffff"
android:textSize="20sp" />
</LinearLayout>
<android.support.v4.view.ViewPager
android:id="@+id/my_view_pager"
android:layout_width="800dp"
android:layout_height="400dp"
android:layout_centerHorizontal="true"
android:layout_marginTop="100dp"
android:background="#55444ff0" >
</android.support.v4.view.ViewPager>
</RelativeLayout></span>
上面一排的title ,下面是ViewPager 是跟fragment绑定的Activity中的代码如下:
<span style="font-size:18px;">package com.example.explore_fragment3;
import java.util.ArrayList;
import java.util.List;
import com.example.explore_fragment.R;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;</span>
<pre name="code" class="java"><span style="font-size:18px;">public class MainActivity3 extends FragmentActivity implements OnClickListener{
FragmentManager mFragmentManager;
List<Fragment> mFragments = new ArrayList<Fragment>();
ViewPager mViewPager;
MyViewAdapter adapter;
TextView title0;
TextView title1;
TextView title2;
TextView title3;
TextView title4;
TextView title5;
TextView[] titles = new TextView[6];
Fragment11 fragment11;
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
setContentView(R.layout.activity_main3);
mViewPager = (ViewPager) findViewById(R.id.my_view_pager);
mFragmentManager = getSupportFragmentManager(); //要使用V4的 manager so 要extends fragmentActivity
initView();
initData();
}
private void initView() {
title0 = (TextView) findViewById(R.id.title0);
title1 = (TextView) findViewById(R.id.title1);
title2 = (TextView) findViewById(R.id.title2);
title3 = (TextView) findViewById(R.id.title3);
title4 = (TextView) findViewById(R.id.title4);
title5 = (TextView) findViewById(R.id.title5);
titles[0] = title0;
titles[1] = title1;
titles[2] = title2;
titles[3] = title3;
titles[4] = title4;
titles[5] = title5;
title0.setOnClickListener(this);
title1.setOnClickListener(this);
title2.setOnClickListener(this);
title3.setOnClickListener(this);
title4.setOnClickListener(this);
title5.setOnClickListener(this);
}
private void initData() {
mFragments.add(new Fragment11());
mFragments.add(new Fragment22());
mFragments.add(new Fragment33());
mFragments.add(new Fragment44());
mFragments.add(new Fragment55());
mFragments.add(new Fragment66());
adapter = new MyViewAdapter(mFragmentManager);
mViewPager.setAdapter(adapter);
mViewPager.setOverScrollMode(View.OVER_SCROLL_NEVER); // 去掉边缘阴影
setTitles(0);
mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
setTitles(position);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
mViewPager.setPageTransformer(true, new ZoomOutPageTransformer());
}
private void setTitles(int selectItem) {
int length = titles.length;
for (int i = 0 ; i < length ; i++){
if (i == selectItem){
titles[i].setSelected(true);
}else{
titles[i].setSelected(false);
}
}
mViewPager.setCurrentItem(selectItem);
}
public class MyViewAdapter extends FragmentStatePagerAdapter{
public MyViewAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return mFragments.get(position);
}
@Override
public int getCount() {
return mFragments.size();
}
@Override
public CharSequence getPageTitle(int position) {
return "title" + position;
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.title0:
setTitles(0);
break;
case R.id.title1:
setTitles(1);
break;
case R.id.title2:
setTitles(2);
break;
case R.id.title3:
setTitles(3);
break;
case R.id.title4:
setTitles(4);
break;
case R.id.title5:
setTitles(5);
break;
default:
break;
}
}
}</span>
</pre><span style="font-size:18px;"></span><pre name="code" class="java"><span style="font-size:18px;">setTitles这个方法是上面一个的title被点击是,他们的状态会被改变(被点击的是select---绿色,没有选中的是unselect---蓝色)</span>
<span style="font-size:18px;">并且使用<span style="font-family: Arial, Helvetica, sans-serif;">mViewPager.setCurrentItem(selectItem);来显示fragmeng</span></span>
</pre><span style="font-size:18px;">需要注意的是使用V4的包,主要是由于ViewPager的adater 是一个 <span style="font-family: Arial, Helvetica, sans-serif;">FragmentStatePagerAdapter这个是V4的包</span></span>
<span style="font-family:Arial, Helvetica, sans-serif;font-size:18px;">那么所有的Fragment fragmentManager 都必须使用V4的, 使用方法跟Android.app下面的使用时一样的</span>
<span style="font-size:18px;"><span style="font-family:Arial, Helvetica, sans-serif;">要注意的是Fragment 不能使用 getFragmentManager() ,而是必须要使用FragmentActivity,所以Activity要继承FragmentActivity
</span></span><pre name="code" class="java"><span style="font-size:18px;">mViewPager.setOverScrollMode(View.OVER_SCROLL_NEVER); // 去掉边缘阴影</span>
<span style="font-size:18px;">这个方法的作用是 当时第一页的时候不继续往左滑动或者最后一页继续往右滑动,会出现阴影,这个方法就是去掉那个阴影</span>
<span style="font-size:18px;">mViewPager.setPageTransformer(true, new ZoomOutPageTransformer());是设置Viewpager的切换效果</span>
<span style="font-size:18px;">其他的大家读一下就会明白,就不解析了</span>
源码下载地址:http://download.youkuaiyun.com/detail/hewence1/8157867
Viewpager的一些切换效果地址:http://download.youkuaiyun.com/detail/hewence1/8158047