1*90c8c64dSAndroid Build Coastguard Worker /* 2*90c8c64dSAndroid Build Coastguard Worker * Copyright 2014 The Android Open Source Project 3*90c8c64dSAndroid Build Coastguard Worker * 4*90c8c64dSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*90c8c64dSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*90c8c64dSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*90c8c64dSAndroid Build Coastguard Worker * 8*90c8c64dSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*90c8c64dSAndroid Build Coastguard Worker * 10*90c8c64dSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*90c8c64dSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*90c8c64dSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*90c8c64dSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*90c8c64dSAndroid Build Coastguard Worker * limitations under the License. 15*90c8c64dSAndroid Build Coastguard Worker */ 16*90c8c64dSAndroid Build Coastguard Worker 17*90c8c64dSAndroid Build Coastguard Worker package com.example.android.drawabletinting; 18*90c8c64dSAndroid Build Coastguard Worker 19*90c8c64dSAndroid Build Coastguard Worker import android.graphics.Color; 20*90c8c64dSAndroid Build Coastguard Worker import android.graphics.PorterDuff; 21*90c8c64dSAndroid Build Coastguard Worker import android.os.Bundle; 22*90c8c64dSAndroid Build Coastguard Worker import android.support.annotation.Nullable; 23*90c8c64dSAndroid Build Coastguard Worker import android.support.v4.app.Fragment; 24*90c8c64dSAndroid Build Coastguard Worker import android.view.LayoutInflater; 25*90c8c64dSAndroid Build Coastguard Worker import android.view.View; 26*90c8c64dSAndroid Build Coastguard Worker import android.view.ViewGroup; 27*90c8c64dSAndroid Build Coastguard Worker import android.widget.AdapterView; 28*90c8c64dSAndroid Build Coastguard Worker import android.widget.ArrayAdapter; 29*90c8c64dSAndroid Build Coastguard Worker import android.widget.ImageView; 30*90c8c64dSAndroid Build Coastguard Worker import android.widget.SeekBar; 31*90c8c64dSAndroid Build Coastguard Worker import android.widget.Spinner; 32*90c8c64dSAndroid Build Coastguard Worker import android.widget.SpinnerAdapter; 33*90c8c64dSAndroid Build Coastguard Worker import android.widget.TextView; 34*90c8c64dSAndroid Build Coastguard Worker 35*90c8c64dSAndroid Build Coastguard Worker import com.example.android.common.logger.Log; 36*90c8c64dSAndroid Build Coastguard Worker 37*90c8c64dSAndroid Build Coastguard Worker /** 38*90c8c64dSAndroid Build Coastguard Worker * Sample that shows tinting of Drawables programmatically and of Drawable resources in XML. 39*90c8c64dSAndroid Build Coastguard Worker * Tinting is set on a nine-patch drawable through the "tint" and "tintMode" parameters. 40*90c8c64dSAndroid Build Coastguard Worker * A color state list is referenced as the tint color, which defines colors for different 41*90c8c64dSAndroid Build Coastguard Worker * states of a View (for example disabled/enabled, focused, pressed or selected). 42*90c8c64dSAndroid Build Coastguard Worker * Programmatically, tinting is applied to a Drawable through its "setColorFilter" method, with 43*90c8c64dSAndroid Build Coastguard Worker * a reference to a color and a PorterDuff blend mode. The color and blend mode can be 44*90c8c64dSAndroid Build Coastguard Worker * changed from the UI. 45*90c8c64dSAndroid Build Coastguard Worker * 46*90c8c64dSAndroid Build Coastguard Worker * @see android.graphics.drawable.Drawable#setColorFilter(int, android.graphics.PorterDuff.Mode) 47*90c8c64dSAndroid Build Coastguard Worker * @see android.graphics.drawable.Drawable#setTint(android.content.res.ColorStateList, android.graphics.PorterDuff.Mode) 48*90c8c64dSAndroid Build Coastguard Worker */ 49*90c8c64dSAndroid Build Coastguard Worker public class DrawableTintingFragment extends Fragment { 50*90c8c64dSAndroid Build Coastguard Worker 51*90c8c64dSAndroid Build Coastguard Worker /** 52*90c8c64dSAndroid Build Coastguard Worker * String that identifies logging output from this Fragment. 53*90c8c64dSAndroid Build Coastguard Worker */ 54*90c8c64dSAndroid Build Coastguard Worker private static final String TAG = "DrawableTintingFragment"; 55*90c8c64dSAndroid Build Coastguard Worker 56*90c8c64dSAndroid Build Coastguard Worker /** 57*90c8c64dSAndroid Build Coastguard Worker * Image that tinting is applied to programmatically. 58*90c8c64dSAndroid Build Coastguard Worker */ 59*90c8c64dSAndroid Build Coastguard Worker private ImageView mImage; 60*90c8c64dSAndroid Build Coastguard Worker 61*90c8c64dSAndroid Build Coastguard Worker /** 62*90c8c64dSAndroid Build Coastguard Worker * Seekbar for alpha component of tinting color. 63*90c8c64dSAndroid Build Coastguard Worker */ 64*90c8c64dSAndroid Build Coastguard Worker private SeekBar mAlphaBar; 65*90c8c64dSAndroid Build Coastguard Worker /** 66*90c8c64dSAndroid Build Coastguard Worker * Seekbar for red component of tinting color. 67*90c8c64dSAndroid Build Coastguard Worker */ 68*90c8c64dSAndroid Build Coastguard Worker private SeekBar mRedBar; 69*90c8c64dSAndroid Build Coastguard Worker /** 70*90c8c64dSAndroid Build Coastguard Worker * Seekbar for green bar of tinting color. 71*90c8c64dSAndroid Build Coastguard Worker */ 72*90c8c64dSAndroid Build Coastguard Worker private SeekBar mGreenBar; 73*90c8c64dSAndroid Build Coastguard Worker /** 74*90c8c64dSAndroid Build Coastguard Worker * Seekbar for blue bar of tinting color. 75*90c8c64dSAndroid Build Coastguard Worker */ 76*90c8c64dSAndroid Build Coastguard Worker private SeekBar mBlueBar; 77*90c8c64dSAndroid Build Coastguard Worker 78*90c8c64dSAndroid Build Coastguard Worker /** 79*90c8c64dSAndroid Build Coastguard Worker * Text label for alpha component seekbar. 80*90c8c64dSAndroid Build Coastguard Worker */ 81*90c8c64dSAndroid Build Coastguard Worker private TextView mAlphaText; 82*90c8c64dSAndroid Build Coastguard Worker /** 83*90c8c64dSAndroid Build Coastguard Worker * Text label for red component seekbar. 84*90c8c64dSAndroid Build Coastguard Worker */ 85*90c8c64dSAndroid Build Coastguard Worker private TextView mRedText; 86*90c8c64dSAndroid Build Coastguard Worker /** 87*90c8c64dSAndroid Build Coastguard Worker * Text label for green component seekbar. 88*90c8c64dSAndroid Build Coastguard Worker */ 89*90c8c64dSAndroid Build Coastguard Worker private TextView mGreenText; 90*90c8c64dSAndroid Build Coastguard Worker /** 91*90c8c64dSAndroid Build Coastguard Worker * Text label for blue component seekbar. 92*90c8c64dSAndroid Build Coastguard Worker */ 93*90c8c64dSAndroid Build Coastguard Worker private TextView mBlueText; 94*90c8c64dSAndroid Build Coastguard Worker 95*90c8c64dSAndroid Build Coastguard Worker /** 96*90c8c64dSAndroid Build Coastguard Worker * Selector for blend type for color tinting. 97*90c8c64dSAndroid Build Coastguard Worker */ 98*90c8c64dSAndroid Build Coastguard Worker private Spinner mBlendSpinner; 99*90c8c64dSAndroid Build Coastguard Worker 100*90c8c64dSAndroid Build Coastguard Worker /** 101*90c8c64dSAndroid Build Coastguard Worker * Computed color for tinting of drawable. 102*90c8c64dSAndroid Build Coastguard Worker */ 103*90c8c64dSAndroid Build Coastguard Worker private int mHintColor; 104*90c8c64dSAndroid Build Coastguard Worker 105*90c8c64dSAndroid Build Coastguard Worker /** 106*90c8c64dSAndroid Build Coastguard Worker * Selected color tinting mode. 107*90c8c64dSAndroid Build Coastguard Worker */ 108*90c8c64dSAndroid Build Coastguard Worker private PorterDuff.Mode mMode; 109*90c8c64dSAndroid Build Coastguard Worker 110*90c8c64dSAndroid Build Coastguard Worker /** 111*90c8c64dSAndroid Build Coastguard Worker * Identifier for state of blend mod spinner in state bundle. 112*90c8c64dSAndroid Build Coastguard Worker */ 113*90c8c64dSAndroid Build Coastguard Worker private static final String STATE_BLEND = "DRAWABLETINTING_BLEND"; 114*90c8c64dSAndroid Build Coastguard Worker /** 115*90c8c64dSAndroid Build Coastguard Worker * Identifier for state of alpha seek bar in state bundle. 116*90c8c64dSAndroid Build Coastguard Worker */ 117*90c8c64dSAndroid Build Coastguard Worker private static final String STATE_ALPHA = "DRAWABLETINTING_ALPHA"; 118*90c8c64dSAndroid Build Coastguard Worker /** 119*90c8c64dSAndroid Build Coastguard Worker * Identifier for state of red seek bar in state bundle. 120*90c8c64dSAndroid Build Coastguard Worker */ 121*90c8c64dSAndroid Build Coastguard Worker private static final String STATE_RED = "DRAWABLETINTING_RED"; 122*90c8c64dSAndroid Build Coastguard Worker /** 123*90c8c64dSAndroid Build Coastguard Worker * Identifier for state of green seek bar in state bundle. 124*90c8c64dSAndroid Build Coastguard Worker */ 125*90c8c64dSAndroid Build Coastguard Worker private static final String STATE_GREEN = "DRAWABLETINTING_GREEN"; 126*90c8c64dSAndroid Build Coastguard Worker /** 127*90c8c64dSAndroid Build Coastguard Worker * Identifier for state of blue seek bar in state bundle. 128*90c8c64dSAndroid Build Coastguard Worker */ 129*90c8c64dSAndroid Build Coastguard Worker private static final String STATE_BLUE = "DRAWABLETINTING_BLUE"; 130*90c8c64dSAndroid Build Coastguard Worker 131*90c8c64dSAndroid Build Coastguard Worker /** 132*90c8c64dSAndroid Build Coastguard Worker * Available tinting modes. Note that this array must be kept in sync with the 133*90c8c64dSAndroid Build Coastguard Worker * <code>blend_modes</code> string array that provides labels for these modes. 134*90c8c64dSAndroid Build Coastguard Worker */ 135*90c8c64dSAndroid Build Coastguard Worker private static final PorterDuff.Mode[] MODES = new PorterDuff.Mode[]{ 136*90c8c64dSAndroid Build Coastguard Worker PorterDuff.Mode.ADD, 137*90c8c64dSAndroid Build Coastguard Worker PorterDuff.Mode.CLEAR, 138*90c8c64dSAndroid Build Coastguard Worker PorterDuff.Mode.DARKEN, 139*90c8c64dSAndroid Build Coastguard Worker PorterDuff.Mode.DST, 140*90c8c64dSAndroid Build Coastguard Worker PorterDuff.Mode.DST_ATOP, 141*90c8c64dSAndroid Build Coastguard Worker PorterDuff.Mode.DST_IN, 142*90c8c64dSAndroid Build Coastguard Worker PorterDuff.Mode.DST_OUT, 143*90c8c64dSAndroid Build Coastguard Worker PorterDuff.Mode.DST_OVER, 144*90c8c64dSAndroid Build Coastguard Worker PorterDuff.Mode.LIGHTEN, 145*90c8c64dSAndroid Build Coastguard Worker PorterDuff.Mode.MULTIPLY, 146*90c8c64dSAndroid Build Coastguard Worker PorterDuff.Mode.OVERLAY, 147*90c8c64dSAndroid Build Coastguard Worker PorterDuff.Mode.SCREEN, 148*90c8c64dSAndroid Build Coastguard Worker PorterDuff.Mode.SRC, 149*90c8c64dSAndroid Build Coastguard Worker PorterDuff.Mode.SRC_ATOP, 150*90c8c64dSAndroid Build Coastguard Worker PorterDuff.Mode.SRC_IN, 151*90c8c64dSAndroid Build Coastguard Worker PorterDuff.Mode.SRC_OUT, 152*90c8c64dSAndroid Build Coastguard Worker PorterDuff.Mode.SRC_OVER, 153*90c8c64dSAndroid Build Coastguard Worker PorterDuff.Mode.XOR 154*90c8c64dSAndroid Build Coastguard Worker }; 155*90c8c64dSAndroid Build Coastguard Worker 156*90c8c64dSAndroid Build Coastguard Worker 157*90c8c64dSAndroid Build Coastguard Worker @Override onCreate(Bundle savedInstanceState)158*90c8c64dSAndroid Build Coastguard Worker public void onCreate(Bundle savedInstanceState) { 159*90c8c64dSAndroid Build Coastguard Worker super.onCreate(savedInstanceState); 160*90c8c64dSAndroid Build Coastguard Worker setHasOptionsMenu(true); 161*90c8c64dSAndroid Build Coastguard Worker } 162*90c8c64dSAndroid Build Coastguard Worker 163*90c8c64dSAndroid Build Coastguard Worker @Override onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)164*90c8c64dSAndroid Build Coastguard Worker public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 165*90c8c64dSAndroid Build Coastguard Worker View v = inflater.inflate(R.layout.tinting_fragment, null); 166*90c8c64dSAndroid Build Coastguard Worker 167*90c8c64dSAndroid Build Coastguard Worker // Set a drawable as the image to display 168*90c8c64dSAndroid Build Coastguard Worker mImage = (ImageView) v.findViewById(R.id.image); 169*90c8c64dSAndroid Build Coastguard Worker mImage.setImageResource(R.drawable.btn_default_normal_holo); 170*90c8c64dSAndroid Build Coastguard Worker 171*90c8c64dSAndroid Build Coastguard Worker // Get text labels and seekbars for the four color components: ARGB 172*90c8c64dSAndroid Build Coastguard Worker mAlphaBar = (SeekBar) v.findViewById(R.id.alphaSeek); 173*90c8c64dSAndroid Build Coastguard Worker mAlphaText = (TextView) v.findViewById(R.id.alphaText); 174*90c8c64dSAndroid Build Coastguard Worker mGreenBar = (SeekBar) v.findViewById(R.id.greenSeek); 175*90c8c64dSAndroid Build Coastguard Worker mGreenText = (TextView) v.findViewById(R.id.greenText); 176*90c8c64dSAndroid Build Coastguard Worker mRedBar = (SeekBar) v.findViewById(R.id.redSeek); 177*90c8c64dSAndroid Build Coastguard Worker mRedText = (TextView) v.findViewById(R.id.redText); 178*90c8c64dSAndroid Build Coastguard Worker mBlueText = (TextView) v.findViewById(R.id.blueText); 179*90c8c64dSAndroid Build Coastguard Worker mBlueBar = (SeekBar) v.findViewById(R.id.blueSeek); 180*90c8c64dSAndroid Build Coastguard Worker 181*90c8c64dSAndroid Build Coastguard Worker // Set a listener to update tinted image when selections have changed 182*90c8c64dSAndroid Build Coastguard Worker mAlphaBar.setOnSeekBarChangeListener(mSeekBarListener); 183*90c8c64dSAndroid Build Coastguard Worker mRedBar.setOnSeekBarChangeListener(mSeekBarListener); 184*90c8c64dSAndroid Build Coastguard Worker mGreenBar.setOnSeekBarChangeListener(mSeekBarListener); 185*90c8c64dSAndroid Build Coastguard Worker mBlueBar.setOnSeekBarChangeListener(mSeekBarListener); 186*90c8c64dSAndroid Build Coastguard Worker 187*90c8c64dSAndroid Build Coastguard Worker 188*90c8c64dSAndroid Build Coastguard Worker // Set up the spinner for blend mode selection from a string array resource 189*90c8c64dSAndroid Build Coastguard Worker mBlendSpinner = (Spinner) v.findViewById(R.id.blendSpinner); 190*90c8c64dSAndroid Build Coastguard Worker SpinnerAdapter sa = ArrayAdapter.createFromResource(getActivity(), 191*90c8c64dSAndroid Build Coastguard Worker R.array.blend_modes, android.R.layout.simple_spinner_dropdown_item); 192*90c8c64dSAndroid Build Coastguard Worker mBlendSpinner.setAdapter(sa); 193*90c8c64dSAndroid Build Coastguard Worker // Set a listener to update the tinted image when a blend mode is selected 194*90c8c64dSAndroid Build Coastguard Worker mBlendSpinner.setOnItemSelectedListener(mBlendListener); 195*90c8c64dSAndroid Build Coastguard Worker // Select the first item 196*90c8c64dSAndroid Build Coastguard Worker mBlendSpinner.setSelection(0); 197*90c8c64dSAndroid Build Coastguard Worker mMode = MODES[0]; 198*90c8c64dSAndroid Build Coastguard Worker 199*90c8c64dSAndroid Build Coastguard Worker if (savedInstanceState != null) { 200*90c8c64dSAndroid Build Coastguard Worker // Restore the previous state if this fragment has been restored 201*90c8c64dSAndroid Build Coastguard Worker mBlendSpinner.setSelection(savedInstanceState.getInt(STATE_BLEND)); 202*90c8c64dSAndroid Build Coastguard Worker mAlphaBar.setProgress(savedInstanceState.getInt(STATE_ALPHA)); 203*90c8c64dSAndroid Build Coastguard Worker mRedBar.setProgress(savedInstanceState.getInt(STATE_RED)); 204*90c8c64dSAndroid Build Coastguard Worker mGreenBar.setProgress(savedInstanceState.getInt(STATE_GREEN)); 205*90c8c64dSAndroid Build Coastguard Worker mBlueBar.setProgress(savedInstanceState.getInt(STATE_BLUE)); 206*90c8c64dSAndroid Build Coastguard Worker } 207*90c8c64dSAndroid Build Coastguard Worker 208*90c8c64dSAndroid Build Coastguard Worker // Apply the default blend mode and color 209*90c8c64dSAndroid Build Coastguard Worker updateTint(getColor(), getTintMode()); 210*90c8c64dSAndroid Build Coastguard Worker 211*90c8c64dSAndroid Build Coastguard Worker return v; 212*90c8c64dSAndroid Build Coastguard Worker } 213*90c8c64dSAndroid Build Coastguard Worker 214*90c8c64dSAndroid Build Coastguard Worker @Override onSaveInstanceState(Bundle outState)215*90c8c64dSAndroid Build Coastguard Worker public void onSaveInstanceState(Bundle outState) { 216*90c8c64dSAndroid Build Coastguard Worker super.onSaveInstanceState(outState); 217*90c8c64dSAndroid Build Coastguard Worker Log.d(TAG, "state saved."); 218*90c8c64dSAndroid Build Coastguard Worker outState.putInt(STATE_BLEND, mBlendSpinner.getSelectedItemPosition()); 219*90c8c64dSAndroid Build Coastguard Worker outState.putInt(STATE_ALPHA, mAlphaBar.getProgress()); 220*90c8c64dSAndroid Build Coastguard Worker outState.putInt(STATE_RED, mRedBar.getProgress()); 221*90c8c64dSAndroid Build Coastguard Worker outState.putInt(STATE_GREEN, mGreenBar.getProgress()); 222*90c8c64dSAndroid Build Coastguard Worker outState.putInt(STATE_BLUE, mBlueBar.getProgress()); 223*90c8c64dSAndroid Build Coastguard Worker } 224*90c8c64dSAndroid Build Coastguard Worker 225*90c8c64dSAndroid Build Coastguard Worker /** 226*90c8c64dSAndroid Build Coastguard Worker * Computes the {@link Color} value from selection on ARGB sliders. 227*90c8c64dSAndroid Build Coastguard Worker * 228*90c8c64dSAndroid Build Coastguard Worker * @return color computed from selected ARGB values 229*90c8c64dSAndroid Build Coastguard Worker */ getColor()230*90c8c64dSAndroid Build Coastguard Worker public int getColor() { 231*90c8c64dSAndroid Build Coastguard Worker final int alpha = mAlphaBar.getProgress(); 232*90c8c64dSAndroid Build Coastguard Worker final int red = mRedBar.getProgress(); 233*90c8c64dSAndroid Build Coastguard Worker final int green = mGreenBar.getProgress(); 234*90c8c64dSAndroid Build Coastguard Worker final int blue = mBlueBar.getProgress(); 235*90c8c64dSAndroid Build Coastguard Worker 236*90c8c64dSAndroid Build Coastguard Worker return Color.argb(alpha, red, green, blue); 237*90c8c64dSAndroid Build Coastguard Worker } 238*90c8c64dSAndroid Build Coastguard Worker 239*90c8c64dSAndroid Build Coastguard Worker /** 240*90c8c64dSAndroid Build Coastguard Worker * Returns the {@link android.graphics.PorterDuff.Mode} for the selected tint mode option. 241*90c8c64dSAndroid Build Coastguard Worker * 242*90c8c64dSAndroid Build Coastguard Worker * @return selected tint mode 243*90c8c64dSAndroid Build Coastguard Worker */ getTintMode()244*90c8c64dSAndroid Build Coastguard Worker public PorterDuff.Mode getTintMode() { 245*90c8c64dSAndroid Build Coastguard Worker return MODES[mBlendSpinner.getSelectedItemPosition()]; 246*90c8c64dSAndroid Build Coastguard Worker } 247*90c8c64dSAndroid Build Coastguard Worker 248*90c8c64dSAndroid Build Coastguard Worker /** 249*90c8c64dSAndroid Build Coastguard Worker * Update the tint of the image with the color set in the seekbars and selected blend mode. 250*90c8c64dSAndroid Build Coastguard Worker * The seekbars are set to a maximum of 255, with one for each of the four components of the 251*90c8c64dSAndroid Build Coastguard Worker * ARGB color. (Alpha, Red, Green, Blue.) Once a color has been computed using 252*90c8c64dSAndroid Build Coastguard Worker * {@link Color#argb(int, int, int, int)}, it is set togethe with the blend mode on the background 253*90c8c64dSAndroid Build Coastguard Worker * image using 254*90c8c64dSAndroid Build Coastguard Worker * {@link android.widget.ImageView#setColorFilter(int, android.graphics.PorterDuff.Mode)}. 255*90c8c64dSAndroid Build Coastguard Worker */ updateTint(int color, PorterDuff.Mode mode)256*90c8c64dSAndroid Build Coastguard Worker public void updateTint(int color, PorterDuff.Mode mode) { 257*90c8c64dSAndroid Build Coastguard Worker // Set the color hint of the image: ARGB 258*90c8c64dSAndroid Build Coastguard Worker mHintColor = color; 259*90c8c64dSAndroid Build Coastguard Worker 260*90c8c64dSAndroid Build Coastguard Worker // Set the color tint mode based on the selection of the Spinner 261*90c8c64dSAndroid Build Coastguard Worker mMode = mode; 262*90c8c64dSAndroid Build Coastguard Worker 263*90c8c64dSAndroid Build Coastguard Worker // Log selection 264*90c8c64dSAndroid Build Coastguard Worker Log.d(TAG, String.format("Updating tint with color [ARGB: %d,%d,%d,%d] and mode [%s]", 265*90c8c64dSAndroid Build Coastguard Worker Color.alpha(color), Color.red(color), Color.green(color), Color.blue(color), 266*90c8c64dSAndroid Build Coastguard Worker mode.toString())); 267*90c8c64dSAndroid Build Coastguard Worker 268*90c8c64dSAndroid Build Coastguard Worker // Apply the color tint for the selected tint mode 269*90c8c64dSAndroid Build Coastguard Worker mImage.setColorFilter(mHintColor, mMode); 270*90c8c64dSAndroid Build Coastguard Worker 271*90c8c64dSAndroid Build Coastguard Worker // Update the text for each label with the value of each channel 272*90c8c64dSAndroid Build Coastguard Worker mAlphaText.setText(getString(R.string.value_alpha, Color.alpha(color))); 273*90c8c64dSAndroid Build Coastguard Worker mRedText.setText(getString(R.string.value_red, Color.red(color))); 274*90c8c64dSAndroid Build Coastguard Worker mGreenText.setText(getString(R.string.value_green, Color.green(color))); 275*90c8c64dSAndroid Build Coastguard Worker mBlueText.setText(getString(R.string.value_blue, Color.blue(color))); 276*90c8c64dSAndroid Build Coastguard Worker } 277*90c8c64dSAndroid Build Coastguard Worker 278*90c8c64dSAndroid Build Coastguard Worker /** 279*90c8c64dSAndroid Build Coastguard Worker * Listener that updates the tint when a blend mode is selected. 280*90c8c64dSAndroid Build Coastguard Worker */ 281*90c8c64dSAndroid Build Coastguard Worker private AdapterView.OnItemSelectedListener mBlendListener = 282*90c8c64dSAndroid Build Coastguard Worker new AdapterView.OnItemSelectedListener() { 283*90c8c64dSAndroid Build Coastguard Worker 284*90c8c64dSAndroid Build Coastguard Worker @Override 285*90c8c64dSAndroid Build Coastguard Worker public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 286*90c8c64dSAndroid Build Coastguard Worker // Selected a blend mode and update the tint of image 287*90c8c64dSAndroid Build Coastguard Worker updateTint(getColor(), getTintMode()); 288*90c8c64dSAndroid Build Coastguard Worker } 289*90c8c64dSAndroid Build Coastguard Worker 290*90c8c64dSAndroid Build Coastguard Worker @Override 291*90c8c64dSAndroid Build Coastguard Worker public void onNothingSelected(AdapterView<?> adapterView) { 292*90c8c64dSAndroid Build Coastguard Worker 293*90c8c64dSAndroid Build Coastguard Worker } 294*90c8c64dSAndroid Build Coastguard Worker 295*90c8c64dSAndroid Build Coastguard Worker }; 296*90c8c64dSAndroid Build Coastguard Worker 297*90c8c64dSAndroid Build Coastguard Worker /** 298*90c8c64dSAndroid Build Coastguard Worker * Seekbar listener that updates the tinted color when the progress bar has changed. 299*90c8c64dSAndroid Build Coastguard Worker */ 300*90c8c64dSAndroid Build Coastguard Worker private SeekBar.OnSeekBarChangeListener mSeekBarListener = 301*90c8c64dSAndroid Build Coastguard Worker new SeekBar.OnSeekBarChangeListener() { 302*90c8c64dSAndroid Build Coastguard Worker @Override 303*90c8c64dSAndroid Build Coastguard Worker public void onProgressChanged(SeekBar seekBar, int i, boolean b) { 304*90c8c64dSAndroid Build Coastguard Worker // Update the tinted color from all selections in the UI 305*90c8c64dSAndroid Build Coastguard Worker updateTint(getColor(), getTintMode()); 306*90c8c64dSAndroid Build Coastguard Worker } 307*90c8c64dSAndroid Build Coastguard Worker 308*90c8c64dSAndroid Build Coastguard Worker @Override 309*90c8c64dSAndroid Build Coastguard Worker public void onStartTrackingTouch(SeekBar seekBar) { 310*90c8c64dSAndroid Build Coastguard Worker } 311*90c8c64dSAndroid Build Coastguard Worker 312*90c8c64dSAndroid Build Coastguard Worker @Override 313*90c8c64dSAndroid Build Coastguard Worker public void onStopTrackingTouch(SeekBar seekBar) { 314*90c8c64dSAndroid Build Coastguard Worker } 315*90c8c64dSAndroid Build Coastguard Worker }; 316*90c8c64dSAndroid Build Coastguard Worker } 317