ViewPager + Fragment 仿微信滑动切换页卡

1、新建类,继承Fragment --导入的是v4的包(向下兼容),利用布局加载器将其与xml结合起来

public class FragmentAddress extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view=inflater.inflate(R.layout.address_layout,container,false);
        return view;
    }
}

2、主布局类,继承FragmentActivity。使用FragmentPagerAdapter适配器加载页卡(数据源)

/**item(页面)切换的相应   */
 private void setPager() {
     main_viewpager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
         @Override
         public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

         }

         @Override
         public void onPageSelected(int position) {
             int currentItem=main_viewpager.getCurrentItem();   //取得当前的item(或是被点击的)
             setTab(currentItem);
         }

         @Override
         public void onPageScrollStateChanged(int state) {
         }
     });
 }

三、主布局的xml文件

<android.support.v4.view.ViewPager
    android:id="@+id/vp_main"
    android:layout_weight="1"
    android:layout_width="match_parent"
    android:layout_height="0dp">

</android.support.v4.view.ViewPager>

<include layout="@layout/tab" />	
--自定义的tab页卡标题--其中一部分
<LinearLayout
    android:id="@+id/ll_weixin"
    android:layout_weight="1"
    android:orientation="vertical"
    android:layout_width="0dp"
    android:layout_height="match_parent">
    <!--点击事件FALSE掉,不会和父布局冲突-->
    <ImageButton
        android:id="@+id/ib_weixin"
        android:clickable="false"
        android:layout_weight="3"
        android:background="@mipmap/tab_weixin_normal"
        android:layout_gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="0dp" />
    <TextView
        android:text="微信"
        android:textSize="19sp"
        android:layout_gravity="center"
        android:textColor="#ffffff"
        android:gravity="center"
        android:layout_weight="2"
        android:layout_width="wrap_content"
        android:layout_height="0dp" />
</LinearLayout>

例子如下:
  
  
//导入的为v4的fragment包
public class TabActivity extends FragmentActivity implements View.OnClickListener{

    private ViewPager main_viewpager;
    private FragmentPagerAdapter adapter_fragment;
    private List
     
     
      
       list_fragment;

    private LinearLayout weixin_ll;
    private LinearLayout address_ll;
    private LinearLayout setting_ll;
    private LinearLayout friend_ll;
//改变背景颜色和item 相互对应
    private ImageButton weixin_ib;
    private ImageButton address_ib;
    private ImageButton setting_ib;
    private ImageButton friend_ib;


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

        initView();
        initEvent();    //点击事件的初始化
        
    }
    /**点击事件的初始化  */
    private void initEvent() {
        weixin_ll.setOnClickListener(this);
        address_ll.setOnClickListener(this);
        setting_ll.setOnClickListener(this);
        friend_ll.setOnClickListener(this);
    }



    /**初始化控件  */
    private void initView() {
                //要把点击的属性FALSE掉,不会和父布局冲突
        weixin_ib= (ImageButton) findViewById(R.id.ib_weixin);
        address_ib= (ImageButton) findViewById(R.id.ib_address);
        friend_ib=  (ImageButton) findViewById(R.id.ib_friend);
        setting_ib= (ImageButton) findViewById(R.id.ib_setting);

        weixin_ll= (LinearLayout)  findViewById(R.id.ll_weixin);
        address_ll= (LinearLayout) findViewById(R.id.ll_address);
        friend_ll= (LinearLayout) findViewById(R.id.ll_friend);
        setting_ll= (LinearLayout) findViewById(R.id.ll_setting);

        main_viewpager= (ViewPager) findViewById(R.id.vp_main);

        //將fragment添加進數據源中
        list_fragment=new ArrayList<>();
        Fragment weixin_fragment=new FragmentWeixin();  //实例化一个Fragment子类对象--自定义的
        Fragment address_fragment=new FragmentAddress();
        Fragment friend_fragment=new FragmentFriend();
        Fragment setting_fragment=new FragmentSetting();

        list_fragment.add(weixin_fragment);         //加入数组中,,注意顺序
        list_fragment.add(address_fragment);
        list_fragment.add(friend_fragment);
        list_fragment.add(setting_fragment);


        initAdapter();  //初始化适配器
        main_viewpager.setAdapter(adapter_fragment);
        setPager();
        setTab(0);   //先默认第二个显示--不然一开始都是暗色的/-一起item改变


    }
/**对item(页面)切换的相应   */
    private void setPager() {
        main_viewpager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                int currentItem=main_viewpager.getCurrentItem();   //取得当前的item(或是被点击的)
                setTab(currentItem);
            }

            @Override
            public void onPageScrollStateChanged(int state) {


            }
        });
    }

    //适配器初始化
    private void initAdapter() {
        adapter_fragment=new FragmentPagerAdapter(getSupportFragmentManager()) {
            @Override
            public Fragment getItem(int position) {
                return list_fragment.get(position);
            }

            @Override
            public int getCount() {
                return list_fragment.size();
            }
        };
    }

    /**每一个tab(LinearLayout)---的点击事件  */
    @Override
    public void onClick(View v) {
        resetImage();   //重置所有的imagebutton的背景颜色---暗色
        switch (v.getId()){
            case R.id.ll_weixin:
                setSelect(0);   //对点击事件作出具体的反应--传参数方法
             break;
            case R.id.ll_address:
                setSelect(1);   //对点击事件作出具体的反应--传参数方法
                break;
            case R.id.ll_friend:
                setSelect(2);   //对点击事件作出具体的反应--传参数方法
                break;
            case R.id.ll_setting:
                setSelect(3);   //对点击事件作出具体的反应--传参数方法
                break;
        }


    }
/**对传来的点击事件作出响应--图片改变/内容对应 */
    private void setSelect(int i) {

        setTab(i);
        main_viewpager.setCurrentItem(i);   //设置当前的item为点击的item
    }

/**根据传来的参数i做具体的相应    */
    private void setTab(int i) {
        resetImage();   //滑动时  重置所有的imagebutton的背景颜色---暗色
        switch (i){
            case 0:
                weixin_ib.setBackgroundResource(R.mipmap.tab_weixin_pressed);

              break;
            case 1:
                address_ib.setBackgroundResource(R.mipmap.tab_address_pressed);
              break;
            case 2:
                friend_ib.setBackgroundResource(R.mipmap.tab_find_frd_pressed);
              break;
            case 3:
                setting_ib.setBackgroundResource(R.mipmap.tab_settings_pressed);
              break;
        }
    }

    /**使所有的imagebutton的颜色变暗   */
    private void resetImage() {
        weixin_ib.setBackgroundResource(R.mipmap.tab_weixin_normal);
        address_ib.setBackgroundResource(R.mipmap.tab_address_normal);
        friend_ib.setBackgroundResource(R.mipmap.tab_find_frd_normal);
        setting_ib.setBackgroundResource(R.mipmap.tab_settings_normal);
    }
}package codefirst.materia_design.fragment;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;     //导入的是此包
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import codefirst.materia_design.R;

//各个fragment类 --用来与xml布局文件关联起来
public class FragmentWeixin extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View view=inflater.inflate(R.layout.weixin_layout,container,false);
        return view;

    }
}
     
     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芒果-橙

谢谢啦!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值