12cfe25aefb32ed215f1c661d9670baf276fb7776James Kung/* 22cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * Copyright (C) 2013 The Android Open Source Project 32cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * 42cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * Licensed under the Apache License, Version 2.0 (the "License"); 52cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * you may not use this file except in compliance with the License. 62cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * You may obtain a copy of the License at 72cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * 82cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * http://www.apache.org/licenses/LICENSE-2.0 92cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * 102cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * Unless required by applicable law or agreed to in writing, software 112cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * distributed under the License is distributed on an "AS IS" BASIS, 122cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * See the License for the specific language governing permissions and 142cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * limitations under the License. 152cfe25aefb32ed215f1c661d9670baf276fb7776James Kung */ 162cfe25aefb32ed215f1c661d9670baf276fb7776James Kung 172cfe25aefb32ed215f1c661d9670baf276fb7776James Kungpackage com.android.colorpicker; 182cfe25aefb32ed215f1c661d9670baf276fb7776James Kung 192cfe25aefb32ed215f1c661d9670baf276fb7776James Kungimport android.content.Context; 202cfe25aefb32ed215f1c661d9670baf276fb7776James Kungimport android.graphics.PorterDuff.Mode; 217f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kungimport android.graphics.drawable.ColorDrawable; 222cfe25aefb32ed215f1c661d9670baf276fb7776James Kungimport android.graphics.drawable.Drawable; 237f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kungimport android.graphics.drawable.LayerDrawable; 247f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kungimport android.view.LayoutInflater; 252cfe25aefb32ed215f1c661d9670baf276fb7776James Kungimport android.view.View; 267f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kungimport android.widget.FrameLayout; 272cfe25aefb32ed215f1c661d9670baf276fb7776James Kungimport android.widget.ImageView; 282cfe25aefb32ed215f1c661d9670baf276fb7776James Kung 292cfe25aefb32ed215f1c661d9670baf276fb7776James Kung/** 302cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * Creates a circular swatch of a specified color. Adds a checkmark if marked as checked. 312cfe25aefb32ed215f1c661d9670baf276fb7776James Kung */ 327f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kungpublic class ColorPickerSwatch extends FrameLayout implements View.OnClickListener { 332cfe25aefb32ed215f1c661d9670baf276fb7776James Kung private int mColor; 347f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung private ImageView mSwatchImage; 357f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung private ImageView mCheckmarkImage; 362cfe25aefb32ed215f1c661d9670baf276fb7776James Kung private OnColorSelectedListener mOnColorSelectedListener; 372cfe25aefb32ed215f1c661d9670baf276fb7776James Kung 382cfe25aefb32ed215f1c661d9670baf276fb7776James Kung /** 392cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * Interface for a callback when a color square is selected. 402cfe25aefb32ed215f1c661d9670baf276fb7776James Kung */ 412cfe25aefb32ed215f1c661d9670baf276fb7776James Kung public interface OnColorSelectedListener { 422cfe25aefb32ed215f1c661d9670baf276fb7776James Kung 432cfe25aefb32ed215f1c661d9670baf276fb7776James Kung /** 442cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * Called when a specific color square has been selected. 452cfe25aefb32ed215f1c661d9670baf276fb7776James Kung */ 462cfe25aefb32ed215f1c661d9670baf276fb7776James Kung public void onColorSelected(int color); 472cfe25aefb32ed215f1c661d9670baf276fb7776James Kung } 482cfe25aefb32ed215f1c661d9670baf276fb7776James Kung 492cfe25aefb32ed215f1c661d9670baf276fb7776James Kung public ColorPickerSwatch(Context context, int color, boolean checked, 502cfe25aefb32ed215f1c661d9670baf276fb7776James Kung OnColorSelectedListener listener) { 512cfe25aefb32ed215f1c661d9670baf276fb7776James Kung super(context); 527f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung mColor = color; 532cfe25aefb32ed215f1c661d9670baf276fb7776James Kung mOnColorSelectedListener = listener; 547f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung 557f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung LayoutInflater.from(context).inflate(R.layout.color_picker_swatch, this); 567f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung mSwatchImage = (ImageView) findViewById(R.id.color_picker_swatch); 577f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung mCheckmarkImage = (ImageView) findViewById(R.id.color_picker_checkmark); 582cfe25aefb32ed215f1c661d9670baf276fb7776James Kung setColor(color); 592cfe25aefb32ed215f1c661d9670baf276fb7776James Kung setChecked(checked); 602cfe25aefb32ed215f1c661d9670baf276fb7776James Kung setOnClickListener(this); 612cfe25aefb32ed215f1c661d9670baf276fb7776James Kung } 622cfe25aefb32ed215f1c661d9670baf276fb7776James Kung 632cfe25aefb32ed215f1c661d9670baf276fb7776James Kung protected void setColor(int color) { 647f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung Drawable[] colorDrawable = new Drawable[] 657f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung {getContext().getResources().getDrawable(R.drawable.color_picker_swatch)}; 667f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung mSwatchImage.setImageDrawable(new ColorStateDrawable(colorDrawable, color)); 672cfe25aefb32ed215f1c661d9670baf276fb7776James Kung } 682cfe25aefb32ed215f1c661d9670baf276fb7776James Kung 692cfe25aefb32ed215f1c661d9670baf276fb7776James Kung private void setChecked(boolean checked) { 702cfe25aefb32ed215f1c661d9670baf276fb7776James Kung if (checked) { 717f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung mCheckmarkImage.setVisibility(View.VISIBLE); 722cfe25aefb32ed215f1c661d9670baf276fb7776James Kung } else { 737f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung mCheckmarkImage.setVisibility(View.GONE); 742cfe25aefb32ed215f1c661d9670baf276fb7776James Kung } 752cfe25aefb32ed215f1c661d9670baf276fb7776James Kung } 762cfe25aefb32ed215f1c661d9670baf276fb7776James Kung 772cfe25aefb32ed215f1c661d9670baf276fb7776James Kung @Override 782cfe25aefb32ed215f1c661d9670baf276fb7776James Kung public void onClick(View v) { 792cfe25aefb32ed215f1c661d9670baf276fb7776James Kung if (mOnColorSelectedListener != null) { 802cfe25aefb32ed215f1c661d9670baf276fb7776James Kung mOnColorSelectedListener.onColorSelected(mColor); 812cfe25aefb32ed215f1c661d9670baf276fb7776James Kung } 822cfe25aefb32ed215f1c661d9670baf276fb7776James Kung } 832cfe25aefb32ed215f1c661d9670baf276fb7776James Kung} 84