Android 引导页根据滑动渐变背景色(改进版)

4,090 阅读2分钟

经过一段时间的“修炼”,以及文章一的反馈,更新了一些知识点,然后自己从新写了一下,作为补充和记录!
对于不清楚做的什么的小伙伴,可以看看文章1的描述或者看看效果图,这里就不啰嗦了,本篇主要是对上一个版本进行简化、修改,也是觉得更好的实现。效果都是和文章1一样。
文章一的跳转
效果图,如下:


效果展示图


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

这次修改呢,替换了上一篇状态栏依赖包的使用,本人觉得现文这个更加的好,使用非常方便,并且作者对4.4的版本做了适配,4.4以上的版本都可以使用这个效果。另外还可以对状态栏的颜色进行透明度的设置,其他还有些设置请各位看看作者的说明吧。(感谢作者!)
statusbaruitl使用说明


2、和文章1对比改进点

(1)、状态栏依赖库替换。(如上1描述)
(2)、使用ArgbEvaluator 进行颜色值渐变的获取。替换了文章1中类ColorShades 的复杂使用。
(3)、用设置全屏,适配版本4.4以下的效果。

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT)
{
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
3、代码部分
布局、资源文件等和文章1中是一样的。不同之处是Activity的代码部分。文章后贴出代码地址,就不再重复说明文章1中相同的代码了。具体的思路描述也参考文章1吧~(嘿嘿~~~)
在此贴出Activity的代码。

public class MainActivity extends Activity{

private RelativeLayout mRootLayout;

private ViewPager mViewPager;

private int colorBg[];

private ArgbEvaluator mArgbEvaluator;

private int barAlpha = 0;

@Override
protected 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);
    }
}}

4、项目GitLub地址
项目地址


效果图为5.0以上运行效果,欢迎大家斧正,感谢大家!