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来看一下