MagicIndicator-使用自定义布局指定整个指标

时间:2018-08-27 19:27:41

标签: android xml

我在应用程序中实现了MagicIndicator库,但是无法对其进行足够的自定义。我想做的事情看起来像这样:


enter image description here


此处的左右四个图标是选项卡,您可以在它们之间滚动。但是中间是一个单独的按钮,可以启动单独的活动。因此,当从第二个选项卡滚动到第三个选项卡时,它只是略去了中间位置。我也想单独设置图标,我现在不知道该怎么做。 到目前为止,我的代码:


MainActivity.java:

public class MainActivity extends AppCompatActivity {

    ViewPager viewPager;
    PagerAdapter adapter;

    private static final String[] CHANNELS = new String[]{"Dashboard", "Wallet", "Add", "Summary", "Settings"};
    private List<String> mDataList = Arrays.asList(CHANNELS);

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

        FloatingActionButton fab = findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this, CreateActivity.class);
                startActivity(intent);
            }
        });

        viewPager = findViewById(R.id.container);
        adapter = new PagerAdapter
                (getSupportFragmentManager(), 3);
        viewPager.setAdapter(adapter);
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int i, float v, int i1) {
            }

            @Override
            public void onPageSelected(int i) {

            }

            @Override
            public void onPageScrollStateChanged(int i) {

            }
        });

        initMagicIndicator1();

    }

    private void initMagicIndicator1() {
        MagicIndicator magicIndicator = findViewById(R.id.magic_indicator1);
        magicIndicator.setBackgroundColor(getResources().getColor(R.color.light_gray));
        CommonNavigator commonNavigator = new CommonNavigator(this);
        commonNavigator.setAdjustMode(true);
        commonNavigator.setAdapter(new CommonNavigatorAdapter() {

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

            @Override
            public IPagerTitleView getTitleView(Context context, final int index) {
                CommonPagerTitleView commonPagerTitleView = new CommonPagerTitleView(context);

                View customLayout = LayoutInflater.from(context).inflate(R.layout.simple_pager_title_layout, null);
                final ImageView titleImg = customLayout.findViewById(R.id.title_img);
                final TextView titleText = customLayout.findViewById(R.id.title_text);
                titleText.setTextSize(TypedValue.COMPLEX_UNIT_SP, 10);
                titleImg.setImageResource(R.drawable.dashboard_gray);
                titleText.setText(mDataList.get(index));
                commonPagerTitleView.setContentView(customLayout);

                commonPagerTitleView.setOnPagerTitleChangeListener(new CommonPagerTitleView.OnPagerTitleChangeListener() {

                    @Override
                    public void onSelected(int index, int totalCount) {
                        titleText.setTextColor(getResources().getColor(R.color.colorPrimary));
                        titleText.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12);
                        titleImg.setImageResource(R.drawable.dashboard_orange);
                    }

                    @Override
                    public void onDeselected(int index, int totalCount) {
                        titleText.setTextColor(getResources().getColor(R.color.gray));
                        titleText.setTextSize(TypedValue.COMPLEX_UNIT_SP, 10);
                        titleImg.setImageResource(R.drawable.dashboard_gray);
                    }

                    @Override
                    public void onLeave(int index, int totalCount, float leavePercent, boolean leftToRight) {
                        titleImg.setScaleX(1.3f + (0.8f - 1.3f) * leavePercent);
                        titleImg.setScaleY(1.3f + (0.8f - 1.3f) * leavePercent);
                    }

                    @Override
                    public void onEnter(int index, int totalCount, float enterPercent, boolean leftToRight) {
                        titleImg.setScaleX(0.8f + (1.3f - 0.8f) * enterPercent);
                        titleImg.setScaleY(0.8f + (1.3f - 0.8f) * enterPercent);
                    }
                });

                commonPagerTitleView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) { viewPager.setCurrentItem(index);
                    }
                });

                return commonPagerTitleView;
            }

            @Override
            public IPagerIndicator getIndicator(Context context) {
                return null;
            }
        });
        magicIndicator.setNavigator(commonNavigator);
        ViewPagerHelper.bind(magicIndicator, viewPager);
    }
}

simple_pager_title_layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    android:paddingLeft="5dp"
    android:paddingRight="5dp">

    <ImageView
        android:id="@+id/title_img"
        android:layout_width="20dp"
        android:layout_height="20dp" />

    <TextView
        android:id="@+id/title_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@color/gray"
        android:layout_marginTop="5dp" />

</LinearLayout>

我该如何实现?任何帮助都非常有用。

0 个答案:

没有答案