如何在 ImageView Android studio 中设置滤镜 属性
How to set filter property in ImageView Android studio
我有一个黄色迷你图 png,我想通过添加一些 css 来更改过滤器。颜色会根据正数或负数变化。
因此,如果数字为负数,则该行应为:
CSS
filter: hue-rotate(300deg) saturate(210%) brightness(0.7) contrast(170%);
如果为正:
filter: hue-rotate(85deg) saturate(80%) brightness(0.85);
ImageView:
<ImageView
android:layout_width="match_parent"
android:layout_height="36dp"
android:id="@+id/sparkline"
android:layout_toRightOf="@+id/coin_icon"
android:src="@drawable/line_24"
android:layout_marginRight="5dp"
/>
MainActivity.Java
ImageView sparkline;
sparkline = itemView.findViewById(R.id.sparkline);
if(datum.getQuote().getUSD().getPercentChange24h() < 0.000){
///red
}else{
//green
}
编辑:
我有:
我想要的:
编辑:
现在我使用了 ImageFilterView:
<androidx.constraintlayout.utils.widget.ImageFilterView
android:layout_width="80dp"
android:layout_height="50dp"
android:id="@+id/sparkline"
android:layout_marginRight="2dp"
app:saturation="80"
app:brightness="0.85"
android:src="@drawable/btc_spike" />
但我仍然需要添加 hue-rotate(300deg)
我找不到任何东西来改变颜色。
请尝试以下方法希望对您有所帮助
public static void changeImageColor(Context ctx,ImageView img, int color){
try {
// img.setColorFilter(color);
img.setColorFilter(color,PorterDuff.Mode.MULTIPLY);
}catch (Exception e){
e.printStackTrace();
}
}
public static void changeImageColorNoMode(Context ctx,ImageView img, int color){
try {
img.setColorFilter(color);
}catch (Exception e){
e.printStackTrace();
}
}
HSB(色调-饱和度-亮度)模型也称为 HSV,其中 V 代表值。有关带图形描述的 HSB 颜色模型和色调轮的更多详细信息,请参见此 Medium。
要在 ImageView 上应用 HSV 颜色滤镜,您可以使用以下方法:
public static int HSVToColor (float[] hsv)
Convert HSV components to an ARGB color. Alpha set to 0xFF.
hsv[0]
is Hue ([0..360])
hsv[1]
is Saturation ([0...1])
hsv[2]
is Value ([0...1])
If hsv values are out of range, they are pinned.
您只需创建具有上述范围的 float[] 数组并将其应用到 ImageView 中,如下所示:
ImageView imageView = findViewById(R.id.imageView);
//hsv[0] is Hue [0 .. 360) hsv[1] is Saturation [0...1] hsv[2] is Value [0...1]
float[] hsv = new float[]{85f, 0.8f, 0.85f};
imageView.setColorFilter(Color.HSVToColor(hsv));
基于您的第一个(黄色图像)应用滤色器(绿色图像)前后的结果将是:
如果我们从附加的 Red/Green 图像中选择一个像素样本,则 RGB 颜色用于 Red:R(209)G(63)B(84)
和 Green:R(69)G(186)B(116)
。现在,如果我们使用 RGB to HSV color conversion tool 将这些 RGB 值转换为 HSV 值,我们将得到以下结果:
红色
RGB:R(209)G(63)B(84) -> HSV:H(351deg)S(69.9%)V(82%)
在代码中:
float[] hsv = new float[]{351f, 0.699f, 0.82f};
imageView.setColorFilter(Color.HSVToColor(hsv));
结果:
绿色
RGB:R(69)G(186)B(116) -> HSV:H(144deg)S(62.9%)V(72.9%)
在代码中:
float[] hsv = new float[]{144f, 0.629f, 0.729f};
imageView.setColorFilter(Color.HSVToColor(hsv));
结果:
我有一个黄色迷你图 png,我想通过添加一些 css 来更改过滤器。颜色会根据正数或负数变化。
因此,如果数字为负数,则该行应为:
CSS
filter: hue-rotate(300deg) saturate(210%) brightness(0.7) contrast(170%);
如果为正:
filter: hue-rotate(85deg) saturate(80%) brightness(0.85);
ImageView:
<ImageView
android:layout_width="match_parent"
android:layout_height="36dp"
android:id="@+id/sparkline"
android:layout_toRightOf="@+id/coin_icon"
android:src="@drawable/line_24"
android:layout_marginRight="5dp"
/>
MainActivity.Java
ImageView sparkline;
sparkline = itemView.findViewById(R.id.sparkline);
if(datum.getQuote().getUSD().getPercentChange24h() < 0.000){
///red
}else{
//green
}
编辑:
我有:
我想要的:
编辑:
现在我使用了 ImageFilterView:
<androidx.constraintlayout.utils.widget.ImageFilterView
android:layout_width="80dp"
android:layout_height="50dp"
android:id="@+id/sparkline"
android:layout_marginRight="2dp"
app:saturation="80"
app:brightness="0.85"
android:src="@drawable/btc_spike" />
但我仍然需要添加 hue-rotate(300deg) 我找不到任何东西来改变颜色。
请尝试以下方法希望对您有所帮助
public static void changeImageColor(Context ctx,ImageView img, int color){
try {
// img.setColorFilter(color);
img.setColorFilter(color,PorterDuff.Mode.MULTIPLY);
}catch (Exception e){
e.printStackTrace();
}
}
public static void changeImageColorNoMode(Context ctx,ImageView img, int color){
try {
img.setColorFilter(color);
}catch (Exception e){
e.printStackTrace();
}
}
HSB(色调-饱和度-亮度)模型也称为 HSV,其中 V 代表值。有关带图形描述的 HSB 颜色模型和色调轮的更多详细信息,请参见此 Medium。
要在 ImageView 上应用 HSV 颜色滤镜,您可以使用以下方法:
public static int HSVToColor (float[] hsv)
Convert HSV components to an ARGB color. Alpha set to 0xFF.
hsv[0]
is Hue ([0..360])hsv[1]
is Saturation ([0...1])hsv[2]
is Value ([0...1])If hsv values are out of range, they are pinned.
您只需创建具有上述范围的 float[] 数组并将其应用到 ImageView 中,如下所示:
ImageView imageView = findViewById(R.id.imageView);
//hsv[0] is Hue [0 .. 360) hsv[1] is Saturation [0...1] hsv[2] is Value [0...1]
float[] hsv = new float[]{85f, 0.8f, 0.85f};
imageView.setColorFilter(Color.HSVToColor(hsv));
基于您的第一个(黄色图像)应用滤色器(绿色图像)前后的结果将是:
如果我们从附加的 Red/Green 图像中选择一个像素样本,则 RGB 颜色用于 Red:R(209)G(63)B(84)
和 Green:R(69)G(186)B(116)
。现在,如果我们使用 RGB to HSV color conversion tool 将这些 RGB 值转换为 HSV 值,我们将得到以下结果:
红色
RGB:R(209)G(63)B(84) -> HSV:H(351deg)S(69.9%)V(82%)
在代码中:
float[] hsv = new float[]{351f, 0.699f, 0.82f};
imageView.setColorFilter(Color.HSVToColor(hsv));
结果:
绿色
RGB:R(69)G(186)B(116) -> HSV:H(144deg)S(62.9%)V(72.9%)
在代码中:
float[] hsv = new float[]{144f, 0.629f, 0.729f};
imageView.setColorFilter(Color.HSVToColor(hsv));
结果: