setColorFilter是仅影响src,还是src和后台?

时间:2014-06-28 12:51:19

标签: android android-imageview android-drawable

注意 - 这个问题涉及android:background属性。

令人困惑,"背景"也经常被用来简单地表示"背景颜色'用于Android的照片:src"。

说我有。

<ImageView
  android:src="@drawable/white_foreground_thing"
  android:background="@drawable/some_bg_thing"
  />

我要更改 setColorFilter

事实上,这是否会影响仅限&#34; src&#34; - 也就是说前景

也影响背景。?

android:background="@drawable/some_bg_thing"

在我的例子中,前景(即src)是一个40像素的白点(因此,我将制作&#34;不同颜色的点&#34;)。

但背景只是一个普通的按钮背景,实际上有一些透明度等等。

所以我想不影响背景;我只会改变大点的颜色&#34;对于不同的按钮。

请注意,(a)从测试中可以肯定地说出来,使用setColorFilter的微妙之处和(b)我真的无法在doco中找到它(对你来说可能很明显帅哥!)

此外 - 这里的PosterDuff.Mode是否相关?或者这完全不相关?

(例如,https://stackoverflow.com/a/18954101/294884

顺便说一句,在很多情况下,这是一个很棒的解决方案。 https://stackoverflow.com/a/17756634/294884

(注意底部的彩色圆点)

但是在这里,我只是想知道地狱的setColorFilter是否影响.background还是只影响.src

1 个答案:

答案 0 :(得分:4)

不,只有您应用过滤器的图像。即:src。


现在这就是我叠加几张图片并改变其中一张图片的颜色的方式 您可以尝试将 @ drawable / head_xxh 设置为 imgHair 背景(因此,删除一个ImageView)并查看它是否有效预期。

结果是指两个独立且重叠的ImageView。

为了好玩和好奇,我试图实现你自己的想法 准备好以下两个xxhdpi图像(480 dpi,以便使它们很好地扩展 - 然后我将它们放在/res/drawable-xxhdpi文件夹中)

当然,我必须仔细调整图像的大小以适应和重叠。

enter image description here和一头白发(你的副本,#34;发白&#34; - 去饱和+发挥亮度/对比度)enter image description here

我做了这个布局,头发图像与头部重叠:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#f000"
    >
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:src="@drawable/head_xxh"
    />
    <ImageView
        android:id="@+id/imgHair"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:src="@drawable/hair_wht_xxh"
    />
    <Button
        android:id="@+id/btnColor"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:text="Random hair color"
        android:onClick="clickHandler"
    />
</RelativeLayout>

这是我使用的代码:

package com.dergolem.abc_2;

import java.util.Random;

import android.app.Activity;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.ImageView;

public class Generic
extends Activity
{
    Random rnd = new Random();

    Button btn = null;
    ImageView img = null;

    @Override
    public void onCreate(final Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.hair);

        img = (ImageView) findViewById(R.id.imgHair);
        btn = (Button) findViewById(R.id.btnColor);
    }

    public void clickHandler(final View v)
    {
        colorize(rnd.nextInt(7));
    }

    private void colorize(final int num)
    {
        int clr = Color.WHITE;
        switch (num)
        {
            case 0:
            {
                clr = Color.RED;
                break;
            }
            case 1:
            {
                clr = Color.GREEN;
                break;
            }
            case 2:
            {
                clr = Color.BLUE;
                break;
            }
            case 3:
            {
                clr = Color.BLACK;
                break;
            }
            case 4:
            {
                clr = Color.CYAN;
                break;
            }
            case 5:
            {
                clr = Color.YELLOW;
                break;
            }
            case 6:
            {
                clr = Color.parseColor("#ff888800");
                break;
            }
        }

        img.setColorFilter(clr, PorterDuff.Mode.MULTIPLY);
    }
}

我得到的一些结果:

enter image description here enter image description here enter image description here enter image description here

即使这个作品看起来像Andy Wharol的照片,也不是。它是我的。 :)
这似乎是您正在寻找的结果。

<强> [编辑]

我没有尝试过这个新想法,但是(通过一些额外的工作)你甚至可以改变其他颜色:

  • 眼睛
  • 皮肤
  • 口红
  • 眼妆(这需要一些耐心)