ViewPager的一个应用,用fragment来当页面,可以左右滑动,上面有一条线,来分隔

示例是如下图

这里写图片描述

这里写图片描述

这里写图片描述

代码如下

activity类

public class TopicDetailActivity extends BaseActivity implements ViewPager.OnPageChangeListener, RadioGroup.OnCheckedChangeListener {
    //注解
    @BindView(R.id.tv_title)
    TextView tvTitle;
    @BindView(R.id.cb_attention)
    CheckBox cbAttention;
    @BindView(R.id.rg_tab_topic)
    RadioGroup rgTabTopic;
    @BindView(R.id.view_line)
    View viewLine;
    @BindView(R.id.vp_content)
    ViewPager vpContent;

    List<Fragment> fragmentList = new ArrayList<>();



    @Override
    protected void initView() {

        initLine();//改变上面的那条线的状态
        initViewpager();
        initRadioGroup();//布局切换
    }



    private void initRadioGroup() {
        rgTabTopic.setOnCheckedChangeListener(this);
        rgTabTopic.check(R.id.rb_new);
    }

    private void initViewpager() {
        fragmentList.add(new TopicFragment());
        fragmentList.add(new TopicFragment());
        vpContent.setAdapter(new CursorPagerAdapter(getSupportFragmentManager(), fragmentList));
        vpContent.addOnPageChangeListener(this);//设置一个监听
    }

    private void initLine() {
        int with = getResources().getDisplayMetrics().widthPixels / 2;
        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(with, ViewGroup.LayoutParams.MATCH_PARENT);
        viewLine.setLayoutParams(params);
    }

    @Override
    protected int getReslayout() {
        return R.layout.activity_topic_detail;
    }


    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        //每次切换的时候改变线条
        FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) viewLine.getLayoutParams();
        int with = getResources().getDisplayMetrics().widthPixels / 2;
        int leftMargin = (int) (with * (position + positionOffset));
        params.setMargins(leftMargin, 0, 0, 0);
        viewLine.setLayoutParams(params);
    }

    @Override
    public void onPageSelected(int position) {
        //选择哪一个
        rgTabTopic.check(position == 0 ? R.id.rb_new : R.id.rb_hot);

    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }

    @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {
        vpContent.setCurrentItem(checkedId == R.id.rb_new ? 0 : 1);
    }
}


fragment类


public class TopicFragment extends BaseFragment {
    @BindView(R.id.lv_content)
    ScrollListView lvContent;
    @BindView(R.id.ptrsv)
    PullToRefreshScrollView ptrsv;



    @Override
    protected void initView() {

    }

    @Override
    public int getLayoutRes() {
        return R.layout.fragment_topic;
    }


}

BaseActivity 类

public abstract  class BaseActivity extends AppCompatActivity{
    {
        MyApp.getInstance().addActivity(this);
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(getReslayout());
        ButterKnife.bind(this);
        initView();
        initBack();
    }

    protected void initBack() {
        ImageView ivBack = (ImageView) findViewById(R.id.iv_back);
        if (ivBack !=null){//使用反射这里就可以不这样写
            ivBack.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    finish();
                }
            });
        }
    }

    protected abstract  void initView() ;

    protected abstract  int getReslayout() ;

    public void showToast(final String msg){
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(getBaseContext(), msg, Toast.LENGTH_SHORT).show();
            }
        });

    }

    public Activity getActivity(){
        return this;
    }
}

BaseFragment 类

public abstract  class BaseFragment extends Fragment {

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View layout = View.inflate(getContext(), getLayoutRes(), null);
        ButterKnife.bind(this, layout);
        return layout;
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        initView();
    }
    protected abstract void initView();

    public abstract int getLayoutRes();


    public void showToast(final String msg){
        getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(getContext(),msg,Toast.LENGTH_SHORT).show();
            }
        });
    }

布局就不在这里搭建了fragment也可以用一个布局来实现,

主要是知道怎么去算那条线的偏移。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值