Android使用Palette把drawable转为bitmap图像大小改变的问题
来源:互联网 发布:什么是数据库的安全性 编辑:程序博客网 时间:2024/06/08 00:27
项目中要做成以下的效果,本地应用直接使用包名和颜色值遍历找对应,三方应用要去提取app的icon颜色作为背景,首先想到了Android5.0新特性相关的palette。
基本使用:异步获取,同步获得会很卡。
1.过时的写法。
//异步获得bitmap图片的颜色值 Palette.generateAsync(bitmap, new Palette.PaletteAsyncListener() { @Override public void onGenerated(Palette palette) { Palette.Swatch muted = palette.getMutedSwatch();//柔和的 if (muted != null) { holder.app_bg.setBackgroundColor(vibrant.getRgb()); } }});2.替代的写法
//异步获得bitmap图片颜色值Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() { Palette.generateAsync(bitmap, new Palette.PaletteAsyncListener() { @Override public void onGenerated(Palette palette) { Palette.Swatch muted = palette.getMutedSwatch();//柔和的 if (muted != null) { holder.app_bg.setBackgroundColor(vibrant.getRgb()); } }});
由于在Android设备中,对图像的处理有可能是耗时操作,因此,Palette类通过异步接口onGenerated回调的方法
来获得Bitmap的颜色值。Palette类获得的颜色值有以下几种类型:
- Palette.Swatch a = palette.getVibrantSwatch();//有活力
- Palette.Swatch b = palette.getDarkVibrantSwatch();//有活力 暗色
- Palette.Swatch c = palette.getLightVibrantSwatch();//有活力 亮色
- Palette.Swatch d = palette.getMutedSwatch();//柔和
- Palette.Swatch e = palette.getDarkMutedSwatch();//柔和 暗色
- Palette.Swatch f = palette.getLightMutedSwatch();//柔和 亮色
我们从以上颜色中可以获取到如下颜色值:
- int color1 = a.getBodyTextColor();//内容颜色
- int color2 = a.getTitleTextColor();//标题颜色
- int color3 = a.getRgb();//rgb颜色
项目中使用如下:
1.圆角的shape:
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#bbb" /> <corners android:topLeftRadius="6dp" android:topRightRadius="6dp" android:bottomRightRadius="6dp" android:bottomLeftRadius="6dp"/></shape>
2.使用shape
<RelativeLayout android:id="@+id/id_rlayout_adapter_app_bg" android:layout_width="246dip" android:layout_height="160dip" android:elevation="4dip" android:background="@drawable/layout_border"> ...</RelativeLayout>
3.使用palette,并改变shape的颜色。
//修改shape的背景色final GradientDrawable p = (GradientDrawable) holder.app_bg.getBackground();final Bitmap bitmap = ShapeUtil.drawableToBitmap(icon);Palette.generateAsync(bitmap, new Palette.PaletteAsyncListener() { @Override public void onGenerated(Palette palette) { Palette.Swatch muted = palette.getMutedSwatch(); if (muted != null) { p.setColor(muted.getRgb()); } else { //当取不到时又取了一次,如果还没有的化,就是默认的#bbb了 Palette.Swatch lightMuted = palette.getLightMutedSwatch(); if (lightMuted != null) { p.setColor(lightMuted.getRgb()); } } } });
把drawable转为bitmap后图像变了,由于下面的控件还要用drawable对象,下次再刷新notifyDataSetChanged()的时候形状发生了变化。解决方法是复制一份出来。
shapeUtil.java
package com.lenovo.nova.settings.utils;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.PixelFormat;import android.graphics.drawable.Drawable;/** * Created by songwenju on 16-1-21. */public class ShapeUtil { /** * drawable转bitmap * @param drawable * @return */ public static Bitmap drawableToBitmap(Drawable drawable) { // 取 drawable 的长宽 int w = drawable.getIntrinsicWidth(); int h = drawable.getIntrinsicHeight(); // 取 drawable 的颜色格式 Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565; // 建立对应 bitmap Bitmap bitmap = Bitmap.createBitmap(w, h, config); // 建立对应 bitmap 的画布 Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, w, h); // 把 drawable 内容画到画布中 drawable.draw(canvas); return bitmap; } /** * drawable 复制 * * @param drawable * @return */ public static Drawable getNewDrawable(Drawable drawable) { if (drawable != null) { return drawable.getConstantState().newDrawable(); }else { throw new NullPointerException("the arg drawable is null"); } }}
0 0
- Android使用Palette把drawable转为bitmap图像大小改变的问题
- Android 改变ImageView图片的Bitmap大小
- 改变Bitmap的大小
- Android Bitmap 转 Drawable 注意的问题
- android加载图像资源大小改变问题
- Drawable转为bitmap。
- 将Drawable转为Bitmap
- drawable转为bitmap对象
- Android把drawable转化为bitmap
- Android 怎么把imageview 转为Bitmap
- Android 怎么把imageview 转为Bitmap
- Android 怎么把imageview 转为Bitmap
- 改变bitmap大小的函数
- Android获取drawable目录下的图片绝对路径并转为Bitmap
- android bitmap大小问题
- 改变图像的大小
- 把bitmap转为圆角的
- android 图片倒影 bitmap与drawable的转换 把图片处理成指定大小 图片圆角处理 dip转换成px
- 多继承与单继承实现代码复用
- 月下西风卷残霜,徒惹一地冷寒沧桑
- UI_协议传值
- IOS学习笔记1
- 【Android】Replace "..." with ellipsis character (…, &&;#8230;) ?
- Android使用Palette把drawable转为bitmap图像大小改变的问题
- android高级框架xUtils之BitmapUtils
- 按位dp初步
- 程序员必备网站大收集(持续更新)
- 《转》VMware vSphere 5.1 学习系列之一:实验环境的搭建
- HDU2057
- Java设计模式之策略模式(一)
- iOS里Toll-Free Bridging的桥接机制
- Leetcode 35. Search Insert Position