首先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 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 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来看一下
标签:Palette,tabs,void,拾取,int,add,new,Android,tabList
来源: https://blog.csdn.net/zhangkaiyazky/article/details/88049591