Android颜色拾取Palette

首先Palette是干嘛的?

Palette是从Bitmap中提取颜色,然后可以把这个颜色设置给背景色、toolbar、TextView等等控件,使界面保持颜色风格统一协调。

效果图:

 

使用流程:

首先添加依赖:    compile files('libs/android-support-v7-palette.jar')

添加jar包

接下来就是主界面代码:类中都有注释,界面就是4个fragment页面。

public class MainActivity extends AppCompatActivity {

    @Bind(R.id.tabs)
    TabLayout tabs;
    @Bind(R.id.viewPager)
    ViewPager viewPager;
    @Bind(R.id.bt)
    Button bT;
    List<Fragment> fragmentList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        setTabFragment();
        bT.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, ListViewActivity.class);
                startActivity(intent);
            }
        });

    }
    
    private void setTabFragment() {
        //设置tabLayout
        tabs.setTabMode(TabLayout.MODE_FIXED);//设置tab模式,当前为系统默认模式
        List<String> tabList = new ArrayList<>();
        tabList.add("Tab1");
        tabList.add("Tab2");
        tabList.add("Tab3");
        tabList.add("Tab4");
        tabs.addTab(tabs.newTab().setText(tabList.get(0)));
        tabs.addTab(tabs.newTab().setText(tabList.get(1)));
        tabs.addTab(tabs.newTab().setText(tabList.get(2)));
        tabs.addTab(tabs.newTab().setText(tabList.get(3)));

        //添加fragment
        fragmentList = new ArrayList<>();
        Tab1Fragment tab1Fragment = new Tab1Fragment();
        Tab2Fragment tab2Fragment = new Tab2Fragment();
        Tab3Fragment tab3Fragment = new Tab3Fragment();
        Tab4Fragment tab4Fragment = new Tab4Fragment();
        fragmentList.add(tab1Fragment);
        fragmentList.add(tab2Fragment);
        fragmentList.add(tab3Fragment);
        fragmentList.add(tab4Fragment);

        //设置adapter
        TabFragmentAdapter adapter = new TabFragmentAdapter(getSupportFragmentManager(), fragmentList, tabList);
        viewPager.setAdapter(adapter);
        tabs.setupWithViewPager(viewPager);//将TabLayout和ViewPager关联
        tabs.setTabsFromPagerAdapter(adapter);//给Tabs设置适配器

        //监听tabs页面切换
        tabs.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                //页面切换时提取页面颜色
                colorChange(tab.getPosition());
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });

        //默认第一页时提取页面颜色
        colorChange(0);

    }

    private static final int[] drawables = {R.mipmap.a3, R.mipmap.a2, R.mipmap.a3, R.mipmap.a2};

    private void colorChange(int position) {

        // 用来提取颜色的Bitmap
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), drawables[position]);

        // 使用Palette来设置从Bitmap中提取出的颜色
        Palette.generateAsync(bitmap, new Palette.PaletteAsyncListener() {
            @Override
            public void onGenerated(Palette palette) {

                Palette.Swatch vibrantSwatch = palette.getVibrantSwatch();
                if (vibrantSwatch == null) return;
                if (android.os.Build.VERSION.SDK_INT >= 21) {
                    Window window = getWindow();
                    //顶部状态栏颜色加深
                    window.setStatusBarColor(colorBurn(vibrantSwatch.getRgb()));
                }
                tabs.setBackgroundColor(vibrantSwatch.getRgb());

            }
        });

    }

    /*
    * 颜色加深处理
    * */
    private int colorBurn(int RGBValues) {
        int red = RGBValues >> 16 & 0xFF;
        int green = RGBValues >> 8 & 0xFF;
        int blue = RGBValues & 0xFF;
        red = (int) Math.floor(red * (1 - 0.1));
        green = (int) Math.floor(green * (1 - 0.1));
        blue = (int) Math.floor(blue * (1 - 0.1));
        return Color.rgb(red, green, blue);
    }
}

项目下载地址:想了解的可以下载Demo来看一下

https://download.csdn.net/my

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@删库跑路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值