效果图如下:
如上图蔬菜和水果按钮分别控制两个Fragment,这里要限制ViewPager不可以左右滑动,只能通过按钮实现滑动切换,然后子Fragment中又分别有三个Fragment与一个ViewPager的使用。
在这边直接贴上代码,MainActivity的代码:
package com.zhjy.fragmentdemo.activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;
import com.zhjy.fragmentdemo.R;
import com.zhjy.fragmentdemo.adapter.MyPagerAdapter;
import com.zhjy.fragmentdemo.fragment.EmergencyFragment;
import com.zhjy.fragmentdemo.fragment.SurgeryFragment;
import com.zhjy.fragmentdemo.view.NonSwipeableViewPager;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private Button mButtonOne,mButtonTwo;
private NonSwipeableViewPager mViewPager;
private ArrayList<Fragment> mArrayList;
private SurgeryFragment mSurgeryFragment;
private EmergencyFragment mEmergencyFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
init();
}
private void init() {
mButtonOne = (Button)findViewById(R.id.button_one);
mButtonTwo = (Button)findViewById(R.id.button_two);
mViewPager = (NonSwipeableViewPager)findViewById(R.id.view_pager);
mButtonOne.setOnClickListener(mOnClickListener);
mButtonTwo.setOnClickListener(mOnClickListener);
if (mArrayList == null){
mArrayList = new ArrayList<>();
}
if (mSurgeryFragment == null){
mSurgeryFragment = new SurgeryFragment();
}
mSurgeryFragment.setmActivity(MainActivity.this);
if (mEmergencyFragment == null){
mEmergencyFragment = new EmergencyFragment();
}
mEmergencyFragment.setmActivity(MainActivity.this);
mArrayList.add(mSurgeryFragment);
mArrayList.add(mEmergencyFragment);
MyPagerAdapter mMyPagerAdapter = new MyPagerAdapter(getSupportFragmentManager(),mArrayList);
mViewPager.setAdapter(mMyPagerAdapter);
}
View.OnClickListener mOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.button_one:
mViewPager.setCurrentItem(0);
break;
case R.id.button_two:
mViewPager.setCurrentItem(1);
break;
default:
break;
}
}
};
}
然后是MainActivity中的两个Fragment代码:
第一个:
package com.zhjy.fragmentdemo.fragment;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import com.nineoldandroids.view.ViewPropertyAnimator;
import com.zhjy.fragmentdemo.R;
import com.zhjy.fragmentdemo.adapter.MyPagerAdapter;
import java.util.ArrayList;
/**
* @author :huangxianfeng on 2016/11/2.
* 蔬菜
*/
public class SurgeryFragment extends Fragment {
private Activity mActivity;
private Button mButton1,mButton2,mButton3;
private ViewPager mViewPager;
private View mView;
private int lineWidth;
private ArrayList<Fragment> mArrayList;
private AFragment mAFragment;
private BFragment mBFragment;
private CFragment mCFragment;
private MyPagerAdapter mMyPagerAdater;
public void setmActivity(Activity mActivity) {
this.mActivity = mActivity;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = View.inflate(mActivity, R.layout.fragment_surgery,null);
init(view);
setAction();
return view;
}
private void init(View view) {
mButton1 = (Button)view.findViewById(R.id.button_1);
mButton2 = (Button)view.findViewById(R.id.button_2);
mButton3 = (Button)view.findViewById(R.id.button_3);
mViewPager = (ViewPager)view.findViewById(R.id.fragmen1_viewpager);
mView = view.findViewById(R.id.indicate_line);
mButton1.setOnClickListener(mOnClickListener);
mButton2.setOnClickListener(mOnClickListener);
mButton3.setOnClickListener(mOnClickListener);
initCalulateLength();
if (mArrayList == null){
mArrayList = new ArrayList<>();
}
if (mAFragment == null){
mAFragment = new AFragment();
}
mAFragment.setmActivity(mActivity);
if (mBFragment == null){
mBFragment = new BFragment();
}
mBFragment.setmActivity(mActivity);
if (mCFragment == null){
mCFragment = new CFragment();
}
mCFragment.setmActivity(mActivity);
mArrayList.add(mAFragment);
mArrayList.add(mBFragment);
mArrayList.add(mCFragment);
if (mMyPagerAdater == null){
mMyPagerAdater = new MyPagerAdapter(getFragmentManager(),mArrayList);
}
mViewPager.setAdapter(mMyPagerAdater);
}
private void setAction() {
//设置ViewPager的监听事件
mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
int length=(int)(position*lineWidth+positionOffset*lineWidth);
ViewPropertyAnimator.animate(mView).translationX(length).setDuration(0);
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
//Button的监听事件
View.OnClickListener mOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.button_1:
mViewPager.setCurrentItem(0);
break;
case R.id.button_2:
mViewPager.setCurrentItem(1);
break;
case R.id.button_3:
mViewPager.setCurrentItem(2);
break;
default:
break;
}
}
};
//测量宽度
protected void initCalulateLength(){
//最后的数字3代表分几块
lineWidth=mActivity.getWindowManager().getDefaultDisplay().getWidth()/3;
mView.getLayoutParams().width=lineWidth;
mView.requestLayout();
}
}
第二个:
package com.zhjy.fragmentdemo.fragment;
import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import com.nineoldandroids.view.ViewPropertyAnimator;
import com.zhjy.fragmentdemo.R;
import com.zhjy.fragmentdemo.adapter.MyPagerAdapter;
import java.util.ArrayList;
/**
* @author :huangxianfeng on 2016/11/2.
* 水果
*/
public class EmergencyFragment extends Fragment {
private Activity mActivity;
private Button mButton1,mButton2,mButton3;
private ViewPager mViewPager;
private View mView;
private int lineWidth;
private ArrayList<Fragment> mArrayList;
private AFragment mAFragment;
private BFragment mBFragment;
private CFragment mCFragment;
private MyPagerAdapter mMyPagerAdater;
public void setmActivity(Activity mActivity) {
this.mActivity = mActivity;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = View.inflate(mActivity, R.layout.fragment_emergency,null);
init(view);
setAction();
return view;
}
private void init(View view) {
mButton1 = (Button)view.findViewById(R.id.button_1);
mButton2 = (Button)view.findViewById(R.id.button_2);
mButton3 = (Button)view.findViewById(R.id.button_3);
mViewPager = (ViewPager)view.findViewById(R.id.fragmen2_viewpager);
mView = view.findViewById(R.id.indicate_line);
mButton1.setOnClickListener(mOnClickListener);
mButton2.setOnClickListener(mOnClickListener);
mButton3.setOnClickListener(mOnClickListener);
initCalulateLength();
if (mArrayList == null){
mArrayList = new ArrayList<>();
}
if (mAFragment == null){
mAFragment = new AFragment();
}
mAFragment.setmActivity(mActivity);
if (mBFragment == null){
mBFragment = new BFragment();
}
mBFragment.setmActivity(mActivity);
if (mCFragment == null){
mCFragment = new CFragment();
}
mCFragment.setmActivity(mActivity);
mArrayList.add(mAFragment);
mArrayList.add(mBFragment);
mArrayList.add(mCFragment);
if (mMyPagerAdater == null){
mMyPagerAdater = new MyPagerAdapter(getFragmentManager(),mArrayList);
}
mViewPager.setAdapter(mMyPagerAdater);
}
private void setAction() {
//设置ViewPager的监听事件
mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
int length=(int)(position*lineWidth+positionOffset*lineWidth);
ViewPropertyAnimator.animate(mView).translationX(length).setDuration(0);
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
//Button的监听事件
View.OnClickListener mOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.button_1:
mViewPager.setCurrentItem(0);
break;
case R.id.button_2:
mViewPager.setCurrentItem(1);
break;
case R.id.button_3:
mViewPager.setCurrentItem(2);
break;
default:
break;
}
}
};
//测量宽度
protected void initCalulateLength(){
lineWidth=mActivity.getWindowManager().getDefaultDisplay().getWidth()/3;
mView.getLayoutParams().width=lineWidth;
mView.requestLayout();
}
}
以上两个Fragment有相同的布局如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:background="#FFFFFF"
android:orientation="vertical"
android:layout_height="match_parent">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="50dp">
<Button
android:text="香蕉"
android:id="@+id/button_1"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent" />
<Button
android:text="苹果"
android:id="@+id/button_2"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent" />
<Button
android:text="葡萄"
android:id="@+id/button_3"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent" />
</LinearLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_centerVertical="true"
android:background="#f6bd9f" />
<View
android:id="@+id/indicate_line"
android:layout_width="0dp"
android:layout_height="3.3dp"
android:background="#F48F5E" />
</RelativeLayout>
<android.support.v4.view.ViewPager
android:id="@+id/fragmen2_viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
然后这其中的两个Fragment钟分别有三个Fragment使用,此时要注意,在主界面的时候ViewPager要限制他的左右滑动,不然的会在子ViewPager滑到最后一个的时候,会滑动MainActivity中的ViewPager.
限制MainActivity中左右滑动的自定义ViewPager如下:
package com.zhjy.fragmentdemo.view;
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
/**
* @author :huangxianfeng on 2016/11/2.
* 自定义ViewPager限制其左右滑动
*/
public class NonSwipeableViewPager extends ViewPager {
public NonSwipeableViewPager(Context context) {
super(context);
}
public NonSwipeableViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
// Never allow swiping to switch between pages
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// Never allow swiping to switch between pages
return false;
}
}
有一些比较简单的布局我就没有贴出来,可以自己随便写点东西。如果有什么好的建议,大家可以留言。
源码下载地址:
http://download.csdn.net/detail/huang3513/9671309
声明
欢迎转载博客,但请保留文章原始出处
作者:定陶黄公子
出处:http://blog.csdn.net/huang3513/article/details/53010147