Tablayout:用于选择/取消选择的图标的不透明度

Sim*_*mon 1 android android-tablayout

这是whatsapp应用程序。请注意,当您选择一个选项卡时,“CONTACTS”一词是白色的,而其他词 CALLS 和 CHATS 的 alpha 值可能为 50%:

WhatsApp的

他们是如何做到这一点的?

我想做一些类似的事情,但用图标而不是文字,但原理应该是一样的。我已经用我的 TabLayout 完成了以下操作:

    TabLayout tabLayout = (TabLayout) findViewById(R.id.sliding_tabs);
    tabLayout.setTabGravity(tabLayout.GRAVITY_FILL);
    tabLayout.setupWithViewPager(viewPager);
    tabLayout.getTabAt(0).setIcon(R.drawable.icon1);
    tabLayout.getTabAt(1).setIcon(R.drawable.icon2);
    tabLayout.getTabAt(2).setIcon(R.drawable.icon3);
Run Code Online (Sandbox Code Playgroud)

这是我的 tabLayout 的 xml:

<android.support.design.widget.TabLayout
    android:id="@+id/sliding_tabs"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#cccccc"
    app:tabPaddingStart="-1dp"
    app:tabPaddingEnd="-1dp" />
Run Code Online (Sandbox Code Playgroud)

我还阅读了此线程:如何在使用 TabLayout 时更改选项卡背景颜色?但这不完全是我想要的。

该线程表示,当您选择或取消选择它时,它会更改整个选项卡的颜色。这意味着您会将图标后面的整个背景更改为不同的颜色,而我只希望图标具有较低的不透明度,而不是背景和图标具有较低的不透明度。

Whatsapp 没有这样做 - 你只能看到“呼叫”这个词被设置为较低的不透明度,而不是这个词背后的背景。

Sim*_*mon 5

与 Avinash 的回答类似,您必须对图标执行以下操作:

   //on first open of app, the icons will be set to alpha of 50% for all other icons besides the current selected icon
    tabLayout.getTabAt(0).getIcon().setAlpha(128);
    tabLayout.getTabAt(2).getIcon().setAlpha(128);
    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {
            switch (position) {
                case 0:
                    tabLayout.getTabAt(0).getIcon().setAlpha(255);
                    tabLayout.getTabAt(1).getIcon().setAlpha(128);
                    tabLayout.getTabAt(2).getIcon().setAlpha(128);
                    break;
                case 1:
                    tabLayout.getTabAt(0).getIcon().setAlpha(128);
                    tabLayout.getTabAt(1).getIcon().setAlpha(255);
                    tabLayout.getTabAt(2).getIcon().setAlpha(128);
                    break;
                case 2:
                    tabLayout.getTabAt(0).getIcon().setAlpha(128);
                    tabLayout.getTabAt(1).getIcon().setAlpha(128);
                    tabLayout.getTabAt(2).getIcon().setAlpha(255);
                    break;
            }
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });
Run Code Online (Sandbox Code Playgroud)