ViewPager引导页根据滑动渐变背景色

来源:互联网 发布:云计算100强 编辑:程序博客网 时间:2024/03/28 16:05

1、主要依赖:
compile'com.android.support:support-v4:25.1.0'
compile 'com.jaeger.statusbaruitl:library:1.3.6'

状态栏依赖包使用非常方便,并且作者对4.4的版本做了适配,4.4以上的版本都可以使用这个效果。另外还可以对状态栏的颜色进行透明度的设置,其他还有些设置请各位看看作者的说明吧。
(感谢作者!)
statusbaruitl使用说明

工作步骤:
(1)、使用状态栏依赖库。
(2)、使用ArgbEvaluator 进行颜色值渐变的获取。
(3)、用设置全屏,适配版本4.4以下的效果。

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT){getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);}

3、代码部分
public class MainActivity extends Activity{private RelativeLayout mRootLayout;private ViewPager mViewPager;private int colorBg[];private ArgbEvaluator mArgbEvaluator;private int barAlpha = 0;@Overrideprotected void onCreate(Bundle savedInstanceState){    super.onCreate(savedInstanceState);    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT)    {        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);    }    setContentView(R.layout.activity_main);    mRootLayout = (RelativeLayout)findViewById(R.id.rl_root);    mViewPager = (ViewPager)findViewById(R.id.viewpager);    StatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.light_green_500), barAlpha);    mArgbEvaluator = new ArgbEvaluator();    colorBg = getResources().getIntArray(R.array.splash_bg);    final IntroPager introPager = new IntroPager(R.array.splash_icon, R.array.splash_desc);    mViewPager.setAdapter(introPager);    mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener()    {        @Override        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)        {            int color = (int)mArgbEvaluator.evaluate(positionOffset, colorBg[position % colorBg.length],                colorBg[(position + 1) % colorBg.length]);            StatusBarUtil.setColor(MainActivity.this, color, barAlpha);            mRootLayout.setBackgroundColor(color);        }        @Override        public void onPageSelected(int position)        {        }        @Override        public void onPageScrollStateChanged(int state)        {        }      });}private class IntroPager extends PagerAdapter{    private String[] mDescs;    private TypedArray mIcons;    public IntroPager(int icoImage, int des)    {        mDescs = getResources().getStringArray(des);        mIcons = getResources().obtainTypedArray(icoImage);    }    @Override    public int getCount()    {        return mIcons.length();    }    @Override    public boolean isViewFromObject(View view, Object object)    {        return view == object;    }    @Override    public Object instantiateItem(ViewGroup container, int position)    {        View itemLayout = getLayoutInflater().inflate(R.layout.layout_app_intro, container, false);        ImageView mImage = (ImageView)itemLayout.findViewById(R.id.iv_img);        TextView mTextView = (TextView)itemLayout.findViewById(R.id.tv_desc);        Button mButton = (Button)itemLayout.findViewById(R.id.btn_launch);        mImage.setImageResource(mIcons.getResourceId(position, 0));        mTextView.setText(mDescs[position]);        if (position == getCount() - 1)        {            mButton.setVisibility(View.VISIBLE);        }        else        {            mButton.setVisibility(View.GONE);        }        container.addView(itemLayout);        return itemLayout;    }    @Override    public void destroyItem(ViewGroup container, int position, Object object)    {        container.removeView((View)object);    }}}


http://www.jianshu.com/p/a0dde1ebf600

ArgbEvaluator一个计算颜色渐变值的类
http://blog.csdn.net/u013581141/article/details/68063469