/* * Copyright 2015 Hippo Seven * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.hippo.nimingban.widget; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Color; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.widget.LinearLayout; import com.hippo.nimingban.R; import com.hippo.widget.ColorView; import com.hippo.widget.Slider; public class ColorPickerView extends LinearLayout implements Slider.OnSetProgressListener, View.OnClickListener { private ColorView mColorBrick; private Slider mRedSlider; private Slider mGreenSlider; private Slider mBlueSlider; private View mRed; private View mPink; private View mPurple; private View mDeepPurple; private View mIndigo; private View mBlue; private View mLightBlue; private View mCyan; private View mTeal; private View mGreen; private View mLightGreen; private View mLime; private View mYellow; private View mAmber; private View mOrange; private View mDeepOrange; private int mColor; public ColorPickerView(Context context) { super(context); init(context, null); } public ColorPickerView(Context context, AttributeSet attrs) { super(context, attrs); init(context, attrs); } public ColorPickerView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context, attrs); } private void init(Context context, AttributeSet attrs) { setOrientation(VERTICAL); LayoutInflater.from(context).inflate(R.layout.widget_color_picker, this); mColorBrick = (ColorView) findViewById(R.id.color_brick); mRedSlider = (Slider) findViewById(R.id.red_slider); mGreenSlider = (Slider) findViewById(R.id.green_slider); mBlueSlider = (Slider) findViewById(R.id.blue_slider); mRed = findViewById(R.id.red); mPink = findViewById(R.id.pink); mPurple = findViewById(R.id.purple); mDeepPurple = findViewById(R.id.deep_purple); mIndigo = findViewById(R.id.indigo); mBlue = findViewById(R.id.blue); mLightBlue = findViewById(R.id.light_blue); mCyan = findViewById(R.id.cyan); mTeal = findViewById(R.id.teal); mGreen = findViewById(R.id.green); mLightGreen = findViewById(R.id.light_green); mLime = findViewById(R.id.lime); mYellow = findViewById(R.id.yellow); mAmber = findViewById(R.id.amber); mOrange = findViewById(R.id.orange); mDeepOrange = findViewById(R.id.deep_orange); mRedSlider.setOnSetProgressListener(this); mGreenSlider.setOnSetProgressListener(this); mBlueSlider.setOnSetProgressListener(this); mRed.setOnClickListener(this); mPink.setOnClickListener(this); mPurple.setOnClickListener(this); mDeepPurple.setOnClickListener(this); mIndigo.setOnClickListener(this); mBlue.setOnClickListener(this); mLightBlue.setOnClickListener(this); mCyan.setOnClickListener(this); mTeal.setOnClickListener(this); mGreen.setOnClickListener(this); mLightGreen.setOnClickListener(this); mLime.setOnClickListener(this); mYellow.setOnClickListener(this); mAmber.setOnClickListener(this); mOrange.setOnClickListener(this); mDeepOrange.setOnClickListener(this); if (attrs != null) { TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ColorPickerView); setColor(a.getColor(R.styleable.ColorPickerView_color, Color.BLACK)); a.recycle(); } else { setColor(Color.BLACK); } } public int getColor() { return mColor; } public void setColor(int color) { mColor = color; mColorBrick.setColor(color); mRedSlider.setProgress((color & 0x00ff0000) >> 16); mGreenSlider.setProgress((color & 0x0000ff00) >> 8); mBlueSlider.setProgress(color & 0x000000ff); } @Override public void onSetProgress(Slider slider, int newProgress, int oldProgress, boolean byUser, boolean confirm) { if (!byUser) { return; } int color = 0; if (mRedSlider == slider) { color = 0xff000000 | (newProgress << 16) | (mGreenSlider.getProgress() << 8) | mBlueSlider.getProgress(); } else if (mGreenSlider == slider) { color = 0xff000000 | (mRedSlider.getProgress() << 16) | (newProgress << 8) | mBlueSlider.getProgress(); } else if (mBlueSlider == slider) { color = 0xff000000 | (mRedSlider.getProgress() << 16) | (mGreenSlider.getProgress() << 8) | newProgress; } mColor = color; mColorBrick.setColor(color); } @Override public void onFingerDown() {} @Override public void onFingerUp() {} @Override public void onClick(View v) { int colorResId = R.color.red_500; if (mRed == v) { colorResId = R.color.red_500; } else if (mPink == v) { colorResId = R.color.pink_500; } else if (mPurple == v) { colorResId = R.color.purple_500; } else if (mDeepPurple == v) { colorResId = R.color.deep_purple_500; } else if (mIndigo == v) { colorResId = R.color.indigo_500; } else if (mBlue == v) { colorResId = R.color.blue_500; } else if (mLightBlue == v) { colorResId = R.color.light_blue_500; } else if (mCyan == v) { colorResId = R.color.cyan_500; } else if (mTeal == v) { colorResId = R.color.teal_500; } else if (mGreen == v) { colorResId = R.color.green_500; } else if (mLightGreen == v) { colorResId = R.color.light_green_500; } else if (mLime == v) { colorResId = R.color.lime_500; } else if (mYellow == v) { colorResId = R.color.yellow_500; } else if (mAmber == v) { colorResId = R.color.amber_500; } else if (mOrange == v) { colorResId = R.color.orange_500; } else if (mDeepOrange == v) { colorResId = R.color.deep_orange_500; } setColor(getContext().getResources().getColor(colorResId)); } }