跟viewpagerIndicator一样的效果,但是不用引用library包

本文转载自:

                   我擦,谁的这是???只能给一个下载地址了:https://codeload.github.com/ldb-github/Layout_Tab/zip/master

                   对不住,大神!

使用环境:

跟viewpagerIndicator一样的效果,但是不用引用library包


使用好处就是不用再依赖一个大大的viewpagerIndicator的包了

使用方法:


1   写下adapter

public class FragmentAdapter extends FragmentPagerAdapter {

    private ArrayList<Fragment> list;
    private ArrayList<String> titleList;
    public FragmentAdapter(FragmentManager fm, ArrayList<Fragment> list) {
        super(fm);
        this.list = list;
    }
    public FragmentAdapter(FragmentManager fm, ArrayList<Fragment> list, ArrayList<String> titleList) {
        super(fm);
        this.list = list;
        this.titleList = titleList;
    }

    @Override
    public Fragment getItem(int position) {
        return list.get(position);
    }

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

    @Override
    public CharSequence getPageTitle(int position) {
        return titleList.get(position);
    }
}


没有转换的烦恼,再也不用为了Fragment和view的问题来回折腾了。


2 创建MainActivity的布局:

<?xml version="1.0" encoding="utf-8"?>
<layout
    xmlns:android="http://schemas.android.com/apk/res/android"
    >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        >
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:orientation="horizontal"
            >

            <TextView
                android:id="@+id/tab1_tv"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center"
                android:text="写入地址"
                android:textColor="#707070"/>

            <TextView
                android:id="@+id/tab2_tv"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center"
                android:text="语音召唤"
                android:textColor="#707070"/>

            <TextView
                android:id="@+id/tab3_tv"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center"
                android:text="多单召唤"
                android:textColor="#707070"/>
        </LinearLayout>
        <!--下划线颜色-->
        <View
            android:id="@+id/cursor"
            android:layout_width="80dp"
            android:layout_height="2dp"
            android:background="#EA5656"
            />
        <android.support.v4.view.ViewPager
            android:id="@+id/viewpager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            />
    </LinearLayout>
</layout>

MainActivity的代码:

package itcast.zz.nolibraryviewpagerindicator;

import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.LinearLayout;

import java.util.ArrayList;
import java.util.List;

import itcast.zz.nolibraryviewpagerindicator.databinding.ActivityMainBinding;
import itcast.zz.nolibraryviewpagerindicator.fragment.FragmentOne;
import itcast.zz.nolibraryviewpagerindicator.fragment.FragmentThree;
import itcast.zz.nolibraryviewpagerindicator.fragment.FragmentTwo;

public class MainActivity extends FragmentActivity implements View.OnClickListener, ViewPager.OnPageChangeListener {

    private ActivityMainBinding mainBinding;
    private View cursorImg;   // 指示器
    private int currentIndex = 0; // 记录当前选中的tab的index
    private int offset = 0; // 指示器的偏移量
    private int leftMargin = 0; // 左margin
    private int screenWidth = 0; // 屏幕宽度
    private int tabCount;   // Tab的数量
    private int widthOfOneTab;// 一个Tab的宽度 screenWidth / tabCount
    private LinearLayout.LayoutParams lp;
    private List<Fragment> mFragments = new ArrayList<>();

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mainBinding = DataBindingUtil.setContentView(this,R.layout.activity_main);
        addViewPager();
    }

    /**
     * 初始化操作
     */
    private void addViewPager() {
        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        screenWidth = dm.widthPixels;

        cursorImg = (View) findViewById(R.id.cursor);
        lp = (LinearLayout.LayoutParams) cursorImg.getLayoutParams();
        leftMargin = lp.leftMargin;

        mFragments.add(new FragmentOne());
        mFragments.add(new FragmentTwo());
        mFragments.add(new FragmentThree());
        mainBinding.viewpager.setAdapter(new FragmentAdapter(getSupportFragmentManager(), (ArrayList<Fragment>) mFragments));
        mainBinding.viewpager.setCurrentItem(0);
        mainBinding.viewpager.setOnPageChangeListener(this);

        tabCount = 3;
        widthOfOneTab = screenWidth / tabCount;

        //        tab点击监听
        mainBinding.tab1Tv.setOnClickListener(this);
        mainBinding.tab2Tv.setOnClickListener(this);
        mainBinding.tab3Tv.setOnClickListener(this);
    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        offset = (widthOfOneTab - cursorImg.getLayoutParams().width) / 2;
        if(position < tabCount - 1){
            lp.leftMargin = (int) (positionOffsetPixels / tabCount) + widthOfOneTab * position + offset;
        }
        cursorImg.setLayoutParams(lp);
        currentIndex = position;
    }

    @Override
    public void onPageSelected(int position) {

    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.tab1_tv:
                mainBinding.viewpager.setCurrentItem(0);
                break;
            case R.id.tab2_tv:
                mainBinding.viewpager.setCurrentItem(1);
                break;
            case R.id.tab3_tv:
                mainBinding.viewpager.setCurrentItem(2);
                break;
        }
    }
}


其中的fragment需要你自己去创建了,这个不说。

因为这个涉及到databinding的一点东西,但是在创建fragment的时候尽量不要使用databinding,因为你的fragment刚开始创建的时候太简单,databinding可能不会辨认这个东西,会造成不必要的麻烦。我就是创建了三个超级简单的fragment用的databinding,结果没有办法转换成view而且我还不知道。导致浪费了两个小时的时间。


省去了14M的library,开心的不得了!

代码地址:https://git.oschina.net/longlyblack/NoLibraryViewPagerIndicator.git