1

我一直在考虑这个问题,但我似乎无法弄清楚。我有一个简单的应用程序退出 3 个选项卡 ( TabLayout+ ViewPager),我想更改ToolBar滑动选项卡时的颜色。我想要实现的效果是在用户滑动到下一个或上一个选项卡时动态更改颜色。

在这里查看视频

在过去,我已经能够ViewPager通过为每个子视图分配颜色并使用PageTransformer修改 alpha 组件来更改子视图的背景,这可以正常工作,但是,ToolBar它不是子视图,ViewPager因此我可以不要为每一页设置颜色,因为ToolBar始终只有一种颜色。

关于如何实现这一目标的任何想法?

4

2 回答 2

3

在这种情况下,您应该向 ViewPager 添加一个 onPageChangeListener,然后单独处理每个更改。

public class MyActivity extends AppCompatActivity {
private Toolbar toolbar;
private ViewPager viewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.oncreate(savedInstanceState);

    //Initialize your views

    viewPager.addOnPageChangeListener(new OnPageChangeListener() {
    //Override default methods and change toolbar color inside of here
    });
  }
}
于 2016-04-06T02:35:50.457 回答
0

您可以借助接口和片段内部的 setUserVisibleHint(boolean isVisibleToUser) 来做到这一点。

颜色变化接口:

public interface ColorChangeInterface {
    void setToolbarAndTabColor(int position);
}

主要活动:

public class MainActivity extends AppCompatActivity implements ColorChangeInterface
{
public void setToolbarAndTabColor(int position)
{
     if(position==1)
        {
            toolbar.setBackgroundColor(ContextCompat.getColor(getApplicationContext(),R.color.classColor4));
            tabLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(),R.color.classColor4));
            Log.d("colorchange",String.valueOf(position));
        }
        else if(position ==2)
        {
            toolbar.setBackgroundColor(ContextCompat.getColor(getApplicationContext(),R.color.classColor2));
            tabLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(),R.color.classColor2));
            Log.d("colorchange", String.valueOf(position));


        }

}

片段一:

让您的片段使用默认的覆盖方法 setUserVisibleHint。这是检查当前Fragment在ViewPager中是否可见,如果Visible使用Interface改变工具栏和Tabbar的颜色。

public class FragmentOne extends Fragment {
 @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
       if (isVisibleToUser)
       {
          ColorChangeInterface colorChangeInterface = (ColorChangeInterface) getActivity();
          colorChangeInterface.setToolbarAndPagerColor(1);
           Log.d("TAG","Current Fragment is visible");
        }
    }
}

片段二:

 public class FragmentOne extends Fragment {
     @Override
        public void setUserVisibleHint(boolean isVisibleToUser) {
            super.setUserVisibleHint(isVisibleToUser);
           if (isVisibleToUser)
           {
              ColorChangeInterface colorChangeInterface = (ColorChangeInterface) getActivity();
              colorChangeInterface.setToolbarAndPagerColor(2);
               Log.d("TAG","Current Fragment is visible");
            }
        }
    }

或者, 如果您只是想在每次滑动时更改工具栏颜色。

public class FragmentOne extends Fragment {
Toolbar toolbar;
 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity);
 toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
       }
         @Override
         public void setUserVisibleHint(boolean isVisibleToUser) {
                super.setUserVisibleHint(isVisibleToUser);
               if (isVisibleToUser)
               {
                 toolbar.setBackgroundColor(ContextCompat.getColor(getApplicationContext(),R.color.classColor2));  
             }
            }
        }
于 2016-04-06T05:43:55.447 回答