Android调色板Palette的应用

举报
yd_221104950 发表于 2020/12/02 23:16:16 2020/12/02
3k+ 0 0
【摘要】 通过 Palette 对象访问图片中的主要颜色以及叠加文本的相应颜色,并根据给定源图片动态更改应用的配色方案。就是通过调色板获取特定的颜色,然后就可以拿着这些颜色去做相应的应用设计,如图片滑动时,应用的导航栏和系统状态栏,跟着变色等等: 大概的使用方式: public class MainActivity extends AppCompatActivity { p...

通过 Palette 对象访问图片中的主要颜色以及叠加文本的相应颜色,并根据给定源图片动态更改应用的配色方案。就是通过调色板获取特定的颜色,然后就可以拿着这些颜色去做相应的应用设计,如图片滑动时,应用的导航栏和系统状态栏,跟着变色等等:
在这里插入图片描述
大概的使用方式:


public class MainActivity extends AppCompatActivity { private ImageView mIV; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mIV = findViewById(R.id.after); } public void onChange(View view){ Palette.Builder builder = Palette.from(BitmapFactory.decodeResource(getResources(), R.mipmap.sunset)); builder.generate(new Palette.PaletteAsyncListener() { @Override public void onGenerated(Palette palette) {

// Palette.Swatch swatch = palette.getVibrantSwatch();  //充满活力的色调
// Palette.Swatch swatch = palette.getLightVibrantSwatch();  //充满活力的亮色调
// Palette.Swatch swatch = palette.getDarkVibrantSwatch();  //充满活力的暗色调

// Palette.Swatch swatch = palette.getMutedSwatch();  //柔和的色调
// Palette.Swatch swatch = palette.getLightMutedSwatch();  //柔和的亮色调
// Palette.Swatch swatch = palette.getDarkMutedSwatch();  //柔和的暗色调
// int color; Palette.Swatch swatch = palette.getDominantSwatch(); if (swatch == null) { color = palette.getDominantColor(getResources().getColor(R.color.colorPrimary));  //如果提取不到颜色样本,就使用默认颜色 } else { color = swatch.getRgb();   //如何提取到颜色样本,就从颜色样本中获得颜色 } int darkColor = colorBurn(color);  //对颜色进行处理,使颜色更深 changeThemeColor(color, darkColor);  //切换主题颜色 } }); } //获得更深的颜色 private int colorBurn(int color) { int alpha = color >> 24; int red = color >> 16 & 0xFF; int green = color >> 8 & 0xFF; int blue = color & 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); } private void changeThemeColor(int color,int darkColor){ if (android.os.Build.VERSION.SDK_INT >= 21) { Window window = getWindow(); window.setStatusBarColor(colorBurn(darkColor));  //设置系统栏颜色 window.setNavigationBarColor(colorBurn(darkColor));  //设置底部NavigationBar颜色 } }
}

  
 

swatch 除了getRgb()方法获取 RGB 颜色之外,还有其他获取颜色的方法:

swatch.getPopulation():  //像素的数量
swatch.getRgb():  //RGB颜色
swatch.getHsl():  //HSL颜色
swatch.getBodyTextColor():  //用于内容正文文本的颜色
swatch.getTitleTextColor():  //标题文本的颜色

  
 

文章来源: blog.csdn.net,作者:WongKyunban,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_40763897/article/details/107086990

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。