使用什么实现
还用问么,ViewPager 以及 Fragment 呀,非常简单。
关键 API
下面的 API 可以根据初始颜色和结束颜色计算中间值。
1
| Object ArgbEvaluator.evaluate(float fraction, Object startValue, Object endValue);
|
具体实现
布局
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="me.loshine.guidedemo.MainActivity">
<android.support.v4.view.ViewPager android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="match_parent"/>
</RelativeLayout>
|
处理滑动背景色
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| public class MainActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener {
ViewPager mViewPager;
private int[] colors; private int state = ViewPager.SCROLL_STATE_IDLE;
private ArgbEvaluator mArgbEvaluator;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
initColors(); initViewPager(); }
private void initViewPager() { mViewPager = (ViewPager) findViewById(R.id.view_pager); if (mViewPager != null) { mViewPager.setBackgroundColor(colors[0]); mViewPager.setAdapter(new FragmentStatePagerAdapter(getSupportFragmentManager()) { @Override public Fragment getItem(int position) { return GuideBaseFragment.newInstance(position); }
@Override public int getCount() { return 4; } });
mViewPager.addOnPageChangeListener(this); } }
private void initColors() { colors = new int[4]; colors[0] = getResources().getColor(R.color.guideBackgroundColor1); colors[1] = getResources().getColor(R.color.guideBackgroundColor2); colors[2] = getResources().getColor(R.color.guideBackgroundColor3); colors[3] = getResources().getColor(R.color.guideBackgroundColor4);
mArgbEvaluator = new ArgbEvaluator(); }
@Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { if (state != ViewPager.SCROLL_STATE_IDLE) { if (positionOffset > 0 && position < 4) { int evaluatePreColor = (int) mArgbEvaluator .evaluate(positionOffset, colors[position], colors[position + 1]); mViewPager.setBackgroundColor(evaluatePreColor); } else if (positionOffset < 0 && position > 0) { int evaluateNextColor = (int) mArgbEvaluator .evaluate(-positionOffset, colors[position], colors[position - 1]); mViewPager.setBackgroundColor(evaluateNextColor); } } }
@Override public void onPageSelected(int position) { }
@Override public void onPageScrollStateChanged(int state) { this.state = state; } }
|
总结
其实实现方式并不复杂,监听 ViewPager 的滚动然后计算中间值即可,重要的是又学习到酷炫的新东西了。