如何在 Android 中获得半透明和彩色图像,就像新的 Google Play 报亭 header 一样?
How can I get a translucent and colorized image in Android like the new Google Play Newsstand header?
我正在尝试像新的 Google Play Newsstand 应用程序一样获得半透明和彩色图像,但直到现在我尝试的所有操作都无法完美运行。下面的图片更具体地说明了我的意思。
Google Play 报亭 header 看起来像这样:
但是我的代码构成了一个 header 对我来说看起来像这样:
太糟糕了!
我的代码是:
ImageUtils.getImageFiltered(this, R.drawable.disaster, R.color.transparent_teal)
在"ImageUtils"class中,方法getImageFiltered(...)
是:
public static Drawable getImageFiltered(Context context, int res, int color) {
Drawable drawable = createContrast(context, res, 50);
color = context.getResources().getColor(color);
ColorFilter filter = new PorterDuffColorFilter(color, PorterDuff.Mode.DARKEN);
drawable.setColorFilter(filter);
return drawable;
}
方法createContrast(context, res, 50);
只是把图片变成黑白的。
那么,有谁知道如何像 Google 的应用那样获取图像吗?
非常感谢,抱歉我的英语不好,我还在学习中。
我认为问题出在 createContrast() 函数中,它使较浅的灰色阴影过度变亮。您可以尝试使用应用了 setSaturation(0) 的 ColorMatrix 将其修复为 return 不应用任何对比度调整的去饱和灰度图像。然后应用 PorterDuff。
或者,您可以使用 ColorMatrixColorFilter 创建效果,通过连接一个 ColorMatrix 转换为灰度和另一个按颜色调制创建,如下所示:
public static Drawable getImageFiltered(Context context, int res, int color) {
// load image:
Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), res);
BitmapDrawable drawable = new BitmapDrawable(context.getResources(), bitmap);
// create matrix to convert to greyscale:
ColorMatrix greyscaleMatrix = new ColorMatrix();
greyscaleMatrix.setSaturation(0);
// create matrix to colorize and apply transluceny:
ColorMatrix colorizeMatrix = new ColorMatrix();
color = context.getResources().getColor(color);
colorizeMatrix.setScale(Color.red(color) / 255.0f,
Color.green(color) / 255.0f,
Color.blue(color) / 255.0f,
Color.alpha(color) / 255.0f); // <- try setting this to 1.0f for no translucency
// concatenate the two matrices and create a ColorMatrixColorFilter from the result:
greyscaleMatrix.postConcat(colorizeMatrix);
ColorMatrixColorFilter filter = new ColorMatrixColorFilter(greyscaleMatrix);
// apply the filter:
drawable.setColorFilter(filter);
return drawable;
}
还有必要把图片做成半透明的吗?除了黑色背景外,从后面似乎看不到任何东西。
我正在尝试像新的 Google Play Newsstand 应用程序一样获得半透明和彩色图像,但直到现在我尝试的所有操作都无法完美运行。下面的图片更具体地说明了我的意思。
Google Play 报亭 header 看起来像这样:
但是我的代码构成了一个 header 对我来说看起来像这样:
太糟糕了!
我的代码是:
ImageUtils.getImageFiltered(this, R.drawable.disaster, R.color.transparent_teal)
在"ImageUtils"class中,方法getImageFiltered(...)
是:
public static Drawable getImageFiltered(Context context, int res, int color) {
Drawable drawable = createContrast(context, res, 50);
color = context.getResources().getColor(color);
ColorFilter filter = new PorterDuffColorFilter(color, PorterDuff.Mode.DARKEN);
drawable.setColorFilter(filter);
return drawable;
}
方法createContrast(context, res, 50);
只是把图片变成黑白的。
那么,有谁知道如何像 Google 的应用那样获取图像吗?
非常感谢,抱歉我的英语不好,我还在学习中。
我认为问题出在 createContrast() 函数中,它使较浅的灰色阴影过度变亮。您可以尝试使用应用了 setSaturation(0) 的 ColorMatrix 将其修复为 return 不应用任何对比度调整的去饱和灰度图像。然后应用 PorterDuff。
或者,您可以使用 ColorMatrixColorFilter 创建效果,通过连接一个 ColorMatrix 转换为灰度和另一个按颜色调制创建,如下所示:
public static Drawable getImageFiltered(Context context, int res, int color) {
// load image:
Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), res);
BitmapDrawable drawable = new BitmapDrawable(context.getResources(), bitmap);
// create matrix to convert to greyscale:
ColorMatrix greyscaleMatrix = new ColorMatrix();
greyscaleMatrix.setSaturation(0);
// create matrix to colorize and apply transluceny:
ColorMatrix colorizeMatrix = new ColorMatrix();
color = context.getResources().getColor(color);
colorizeMatrix.setScale(Color.red(color) / 255.0f,
Color.green(color) / 255.0f,
Color.blue(color) / 255.0f,
Color.alpha(color) / 255.0f); // <- try setting this to 1.0f for no translucency
// concatenate the two matrices and create a ColorMatrixColorFilter from the result:
greyscaleMatrix.postConcat(colorizeMatrix);
ColorMatrixColorFilter filter = new ColorMatrixColorFilter(greyscaleMatrix);
// apply the filter:
drawable.setColorFilter(filter);
return drawable;
}
还有必要把图片做成半透明的吗?除了黑色背景外,从后面似乎看不到任何东西。