2016-08-13 7 views
0

私は3つのタブを持つアンドロイドアプリを開発中です。私はTabLayoutViewPagerを使用しています。 AppBar & TabLayoutの3種類の背景色に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; 
    } 
} 
関連する問題