19

赤、緑、青、黄、紫の5色のアプリケーションに取り組んでいます

これらの色から混色を実装したい:各色に5つのボタンがあるように。

ユーザーは、この色が以前に描画された色と混ざる色のボタンに触れます。

2 つのカラー コードを追加して 3 番目の色を取得する方法がわかりません。

編集:

この色をイメージビューのビットマップにも設定する必要があります

どうすればこれを設定できますか?

4

7 に答える 7

46

2015 年 4 月以降、v4 サポート ライブラリのblendARGB メソッドを使用できます。

int resultColor = ColorUtils.blendARGB(color1, color2, 0.5F);

均一な混合を実現するには、比率の値を 0.5 にする必要があります。

于 2016-07-27T20:20:49.000 に答える
18

SlidingTabStripには、色をブレンドするための非常に便利なメソッドがあり、ViewPager で使用すると見栄えがします。

private static int blendColors(int color1, int color2, float ratio) {
    final float inverseRation = 1f - ratio;
    float r = (Color.red(color1) * ratio) + (Color.red(color2) * inverseRation);
    float g = (Color.green(color1) * ratio) + (Color.green(color2) * inverseRation);
    float b = (Color.blue(color1) * ratio) + (Color.blue(color2) * inverseRation);
    return Color.rgb((int) r, (int) g, (int) b);
}
于 2014-06-18T12:16:11.957 に答える
16

別の答え:

16 進数でビットを混在させることができます。

public static int mixTwoColors( int color1, int color2, float amount )
{
    final byte ALPHA_CHANNEL = 24;
    final byte RED_CHANNEL   = 16;
    final byte GREEN_CHANNEL =  8;
    final byte BLUE_CHANNEL  =  0;

    final float inverseAmount = 1.0f - amount;

    int a = ((int)(((float)(color1 >> ALPHA_CHANNEL & 0xff )*amount) +
                   ((float)(color2 >> ALPHA_CHANNEL & 0xff )*inverseAmount))) & 0xff;
    int r = ((int)(((float)(color1 >> RED_CHANNEL & 0xff )*amount) +
                   ((float)(color2 >> RED_CHANNEL & 0xff )*inverseAmount))) & 0xff;
    int g = ((int)(((float)(color1 >> GREEN_CHANNEL & 0xff )*amount) +
                   ((float)(color2 >> GREEN_CHANNEL & 0xff )*inverseAmount))) & 0xff;
    int b = ((int)(((float)(color1 & 0xff )*amount) +
                   ((float)(color2 & 0xff )*inverseAmount))) & 0xff;

    return a << ALPHA_CHANNEL | r << RED_CHANNEL | g << GREEN_CHANNEL | b << BLUE_CHANNEL;
}
于 2013-11-17T22:35:11.313 に答える
6

ArgbEvaluatorを参照してください(API 11 以降) http://developer.android.com/reference/android/animation/ArgbEvaluator.html

于 2014-07-15T21:43:15.657 に答える
5

色が RGB 空間にある場合は、非常に単純です (ただし、結果が満足のいくものではない場合があります)。

public int mixColors(int col1, int col2) {
    int r1, g1, b1, r2, g2, b2;

    r1 = Color.red(col1);
    g1 = Color.green(col1);
    b1 = Color.blue(col1);

    r2 = Color.red(col2);
    g2 = Color.green(col2);
    b2 = Color.blue(col2);

    int r3 = (r1 + r2)/2;
    int g3 = (g1 + g2)/2;
    int b3 = (b1 + b2)/2;

    return Color.rgb(r3, g3, b3);
}

他の色空間を使用したい場合は、ウィキペディアを検索して HSL 色空間を見つけてください。また、それを行うためのライブラリもいくつかあります。

次に、この質問を読む必要があります: RGB での混合色の計算

于 2011-05-20T09:52:26.247 に答える
1

ColorAndroid では、クラスを使用して色を操作できます。

このクラスを使用すると、色の赤、緑、青のコンポーネントにアクセスできるため、それらを操作してカラー アルゴリズムを適用できます。次の方法で、カラー int からカラー コンポーネントを抽出できます。

int color = Color.BLACK;

int red, green, blue;
red = Color.red(color);
green = Color.green(color);
blue = Color.blue(color);

各値は 0 から 255 の間である必要があるため、2 つの色を混ぜ合わせる場合は、値を 2 で割って最終結果が同じ間隔内になるようにするか、各色が異なるという事実を念頭に置いて別のアルゴリズムを適用する必要があります。コンポーネントは、ピクセルの輝度に対して異なる重みを持ちます。

于 2011-05-20T09:52:35.880 に答える