简体   繁体   English

使用ViewPager AddOnPageListener动画TabLayout图标

[英]Animate TabLayout Icons Using ViewPager AddOnPageListener

I was making a simple filled and unfilled tab icons to my tab layout using the viewPager.addOnPageListener . 我使用viewPager.addOnPageListener将简单的填充和未填充选项卡图标制作为选项卡布viewPager.addOnPageListener I try it, by creating an array of icons. 我尝试通过创建图标数组来进行尝试。

填充

未填充

The problem is that viewPager.addOnPageListener doesn't return false . 问题是viewPager.addOnPageListener不会返回false It always return true . 它总是返回true And if I invert the statement it always returns false . 如果我反转该语句,它总是返回false

Here's my sample code: 这是我的示例代码:

//TAB ICONS
    private final int[] icons = {R.drawable.home_96px,R.drawable.view_details_75px,R.drawable.today_75px,R.drawable.group_75px};
    private final int[] iconsFilled = {R.drawable.home_filled_96px,R.drawable.view_details_filled_75px,R.drawable.today_filled_75px,R.drawable.group_filled_75px};


//MAP VIEWPAGER AND TAB
public void setUpViewTab(){
    viewPager = (ViewPager) findViewById(R.id.viewpager);
    mTabLayout = (TabLayout) findViewById(R.id.tablayout);
    setupViewPager(viewPager);
    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {
            //CHANGE THE TOOLBAR TEXT AS IT TRANSFER TO OTHER FRAGMENTS
            switch (position){
                case 0:
                    if (position == 0) {
                        mTabLayout.getTabAt(0).setIcon(iconsFilled[0]);
                        mToolbar.setTitle("Yayong");
                    }else {
                        mTabLayout.getTabAt(0).setIcon(icons[0]);
                    }
                    break;

                case 1:
                    mTabLayout.getTabAt(1).setIcon(iconsFilled[1]);
                    mToolbar.setTitle("News");
                    break;

                case 2:
                    mTabLayout.getTabAt(2).setIcon(iconsFilled[2]);
                    mToolbar.setTitle("Events");
                    break;

                case 3:
                    mTabLayout.getTabAt(3).setIcon(iconsFilled[3]);
                    mToolbar.setTitle("Users");
                    break;
            }
        }

        @Override
        public void onPageScrollStateChanged(int state) {

            }

        });

    mTabLayout.setupWithViewPager(viewPager);
}

I try if else statement to see if it return false but didn't. 我尝试if else语句查看它是否返回false,但没有返回。

I know its' too late.. but still who are looking for an answer, here is the snippet 我知道为时已晚..但是仍然在寻找答案的人,这是代码段

Set the listener to the viewpager 将监听器设置为viewpager

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {
            setupTabIcons(position);
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

Method to change the Icon 更改图标的方法

 private int tabIconsFocus [] = new int[]{R.drawable.ic_conversation_focus,R.drawable.ic_contact_people_focus, R.drawable.ic_settings_focus};
private int tabIconsNoFocus [] = new int[]{R.drawable.ic_conversation_no_focus,R.drawable.ic_contact_people_no_focus, R.drawable.ic_settings_no_focus};

private void setupTabIcons(int pos) {
    switch (pos){
        case 0:
            tabLayout.getTabAt(0).setIcon(tabIconsFocus[0]);
            tabLayout.getTabAt(1).setIcon(tabIconsNoFocus[1]);
            tabLayout.getTabAt(2).setIcon(tabIconsNoFocus[2]);

            break;
        case 1:
            tabLayout.getTabAt(0).setIcon(tabIconsNoFocus[0]);
            tabLayout.getTabAt(1).setIcon(tabIconsFocus[1]);
            tabLayout.getTabAt(2).setIcon(tabIconsNoFocus[2]);

            break;

        case 2:
            tabLayout.getTabAt(0).setIcon(tabIconsNoFocus[0]);
            tabLayout.getTabAt(1).setIcon(tabIconsNoFocus[1]);
            tabLayout.getTabAt(2).setIcon(tabIconsFocus[2]);

            break;
    }
}

Note: this will not animate the item icon.. but does change the icon when the page changes 注意:这不会为项目图标设置动画。但是当页面更改时,图标的确会更改

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM