2016-08-13 2 views
0

Я разрабатываю приложение для Android, имеющее 3 вкладки. Я использую TabLayout и ViewPager. Я планировал дать 3 разных цвета фона для AppBar & TabLayout на 3 разных вкладках. Мне нужно сделать плавный переход между цветами при смене вкладок с помощью прокрутки или нажатием на вкладки. Как вы делаете этот переход? Кто-нибудь может мне помочь?Изменение цвета фона Tablayout при прокрутке

ответ

2

сделаю образец. надеюсь это поможет.

enter image description here

В вашей деятельности:

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

    ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); 
    TabLayout tabLayout = (TabLayout) findViewById(R.id.tablayout); 

    int[] colors = {Color.RED, Color.GREEN, Color.BLUE}; 
    viewPager.setAdapter(new MyAdapter()); 
    viewPager.addOnPageChangeListener(new HeaderColorChanger(tabLayout, colors)); 
    tabLayout.setupWithViewPager(viewPager); 
} 

MyAdapter как это:

class MyAdapter extends PagerAdapter { 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
     TextView view = (TextView) LayoutInflater 
       .from(container.getContext()) 
       .inflate(R.layout.row_item, container, false); 
     container.addView(view); 
     view.setText("Page:" + position); 
     return view; 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     container.removeView((View) object); 
    } 

    @Override 
    public int getCount() { 
     return 3; 
    } 

    @Override 
    public boolean isViewFromObject(View view, Object object) { 
     return view == object; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return "Page:" + position; 
    } 
} 

HeaderColorChanger как это:

class HeaderColorChanger implements ViewPager.OnPageChangeListener { 

    private ArgbEvaluator argbEvaluator = new ArgbEvaluator(); 
    private View mView; 
    private int[] mColors; 

    HeaderColorChanger(View view, int[] colors) { 
     mView = view; 
     mColors = colors; 
    } 

    @Override 
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
     mView.setBackgroundColor(getHeaderColor(position, positionOffset)); 
    } 

    @Override 
    public void onPageSelected(int position) { 
    } 

    @Override 
    public void onPageScrollStateChanged(int state) { 

    } 

    private int getHeaderColor(int position, float positionOffset) { 
     if (position == mColors.length - 1) { 
      return mColors[position]; 
     } 
     int startColor = mColors[position]; 
     int endColor = mColors[position + 1]; 
     int color = (int) argbEvaluator.evaluate(positionOffset, startColor, endColor); 
     return color; 
    } 
} 
Смежные вопросы