あなたが探している混色は、直感的な混色、またはRYBカラーシステムと呼ばれることもあります。
RYB:
CCライセンス
直感的な混色のアルゴリズムに関するNathanGossettとBaoquanChenによるこの論文からの引用は、直感的なカラーシステムがどのように機能するかを要約しています。
「このモデルでは、赤、黄、青を純粋な原色として使用しています。赤と黄を混ぜてオレンジを作り、黄と青を混ぜて緑を作り、青と赤を混ぜて紫を作ります[...]。訓練を受けていない視聴者が子供の絵の具を使って得ることを期待する色[...]。さらに、多くの人々は白をすべての色の混合物としてではなく、色の欠如(空白のキャンバス)と考えています。多くの色を混ぜ合わせると、濁った濃い茶色になると想定されます。」
RYBはAndroidのブレンドモードでは実装されておらず、アルファ/異なるブレンドモードを混合して実際にシミュレートすることはできません。
ほとんどのコンピュータグラフィックスアプリケーションは、RGBまたはCMYK色空間を利用します。
CMYK:
CCライセンス
CMYは減法混色に基づいています。減法混色とは、白から始めて、色を追加すると、結果が暗くなることを意味します。CMYKは、PhotoshopやIllustratorなどでの印刷を目的とした画像の色を混合するために使用されます。
RGB:
CCライセンス
RGBは加法色に基づいています。コンピュータ画面の色は、加法色法を使用して光で作成されます。加法混色は黒で始まり、色が追加されるにつれて、結果は明るくなり、白で終わります。
このサイトでは、CMYKとRGBについて詳しく説明しています。
RGBでもCMYKでも、青と黄色を混合しても緑、または一般的に言えば直感的なカラーミックスは生成されません。AndroidにRYBカラーシステムを実装するには、かなりの作業が必要になります。上で引用したNathanGossettとBaoquanChenの論文は、論文の最後にCで実装されたアルゴリズムを使用したソリューションを提案しています。このアルゴリズムは、Androidのカスタムブレンドで実装できます。を拡張するをDrawable.setColorFilter()
使用します。このSOの質問で説明されているサブクラス化は、NDKを使用してネイティブコードで実行する必要があります。PorterDuffColorfilter
ColorFilter
ColorFilter
CMYKカラーミキシングの回避策
回避策としてCMYK混色を使用することに興味がある場合は、その方法の基本的な例を以下に示します。この例では、シアン色の円と黄色の円をブレンドして、緑色の交差点を作成します。
AdobeIllustratorで作成されたこれらの.png画像ファイルから始めます。


16進カラー値0x00ffff(シアン)および0xffff00(イエロー)。
それらをcyancircle.pngおよびyellowcircle.pngという名前でドローアブルフォルダに追加します。
main.xmlレイアウトを次のように構成します。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#ffffff"
android:padding="30dp">
<ImageView
android:id="@+id/bluecircle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/cyancircle">
</ImageView>
<ImageView
android:id="@+id/yellowcircle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/yellowcircle"
android:layout_marginTop="30dp">
</ImageView>
</RelativeLayout>
アクティビティを作成します。
import android.app.Activity;
import android.graphics.PorterDuff;
import android.os.Bundle;
import android.widget.ImageView;
public class PorterDuffTestActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageView yellowCircle = (ImageView)findViewById(R.id.yellowcircle);
yellowCircle.getDrawable().setColorFilter(0x88ffff00, PorterDuff.Mode.MULTIPLY);
}
}
出力:

この方法の制限は、トップシェイプのアルファを50%(「0x88ffff00」の「88」)に設定する必要があることです。黄色の場合、これは適切に機能しますが、他の色の場合、アルファ効果は受け入れられない場合があります(たとえば、白の背景で赤がピンクになり、アルファ値が低くなるなど、色が別の色に見える場合があります)。どのブレンドモードが最終的に受け入れられるかは、使用する色のセットによって異なり、ある程度の実験が必要になります。また、ブレンドモードでは、背景色が円の色に影響を与える可能性があることに注意してください。この例では、背景が白に設定されています。