首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

色彩选择器

2012-09-27 
颜色选择器?ColorPick.javapublic class ColorPickerPreference extends DialogPreference {private int m

颜色选择器


色彩选择器
?

ColorPick.java

public class ColorPickerPreference extends DialogPreference {private int mInitialColor;private int mCurrentColor;private ColorPickerView colorPickerView;public interface OnColorChangedListener {void colorChanged(int color);}public ColorPickerPreference(Context context, AttributeSet attrs) {super(context, attrs);}public ColorPickerPreference(Context context, AttributeSet attrs,int defStyle) {super(context, attrs, defStyle);}@Overrideprotected void onDialogClosed(boolean positiveResult) {if (positiveResult) {mCurrentColor = colorPickerView.getColor();System.out.println("当前选中的颜色:" + mCurrentColor);// 将颜色保存到SharedPreferencesSharedPreferences sp = getContext().getApplicationContext().getSharedPreferences("mycolor", Context.MODE_PRIVATE); // 获得PreferencesEditor editor = sp.edit();editor.putInt(getKey(), mCurrentColor);editor.commit();callChangeListener(new Integer(mCurrentColor));}}@Overrideprotected void onPrepareDialogBuilder(Builder builder) {super.onPrepareDialogBuilder(builder);OnColorChangedListener onColorChangedListener = new OnColorChangedListener() {public void colorChanged(int color) {mCurrentColor = color;onDialogClosed(true);getDialog().dismiss();}};SharedPreferences prefs = getPreferenceManager().getSharedPreferences();mInitialColor = prefs.getInt(getKey(), Color.LTGRAY);LinearLayout layout = new LinearLayout(getContext());layout.setPadding(20, 20, 20, 20);layout.setOrientation(LinearLayout.VERTICAL);colorPickerView = new ColorPickerView(getContext(),onColorChangedListener, mInitialColor);LinearLayout.LayoutParams params1 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);params1.gravity = Gravity.CENTER;colorPickerView.setLayoutParams(params1);layout.addView(this.colorPickerView);layout.setId(android.R.id.widget_frame);builder.setView(layout);}/** * 颜色选择面板 *  * @author lilin * @date 2011-9-15 下午03:54:27 * @ClassName: ColorPickerView * @Description: TODO */private static class ColorPickerView extends View {private Paint mPaint;private Paint mCenterPaint;private Paint mHSVPaint;private final int[] mColors;private int[] mHSVColors;private boolean mRedrawHSV;private OnColorChangedListener mListener;ColorPickerView(Context c, OnColorChangedListener l, int color) {super(c);mListener = l;mColors = new int[] { 0xFFFF0000, 0xFFFF00FF, 0xFF0000FF,0xFF00FFFF, 0xFF00FF00, 0xFFFFFF00, 0xFFFF0000 };Shader s = new SweepGradient(0, 0, mColors, null);mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);mPaint.setShader(s);mPaint.setStyle(Paint.Style.STROKE);mPaint.setStrokeWidth(55);mCenterPaint = new Paint(Paint.ANTI_ALIAS_FLAG);mCenterPaint.setColor(color);mCenterPaint.setStrokeWidth(5);mHSVColors = new int[] { 0xFF000000, color, 0xFFFFFFFF };mHSVPaint = new Paint(Paint.ANTI_ALIAS_FLAG);mHSVPaint.setStrokeWidth(10);mRedrawHSV = true;}private boolean mTrackingCenter;private boolean mHighlightCenter;public int getColor() {return mCenterPaint.getColor();}@Overrideprotected void onDraw(Canvas canvas) {float r = CENTER_X - mPaint.getStrokeWidth() * 0.5f;canvas.translate(CENTER_X, CENTER_X);int c = mCenterPaint.getColor();if (mRedrawHSV) {mHSVColors[1] = c;mHSVPaint.setShader(new LinearGradient(-100, 0, 100, 0,mHSVColors, null, Shader.TileMode.CLAMP));}canvas.drawOval(new RectF(-r, -r, r, r), mPaint);canvas.drawCircle(0, 0, CENTER_RADIUS, mCenterPaint);canvas.drawRect(new RectF(-100, 130, 100, 110), mHSVPaint);if (mTrackingCenter) {mCenterPaint.setStyle(Paint.Style.STROKE);if (mHighlightCenter) {mCenterPaint.setAlpha(0xFF);} else {mCenterPaint.setAlpha(0x80);}canvas.drawCircle(0, 0, CENTER_RADIUS+ mCenterPaint.getStrokeWidth(), mCenterPaint);mCenterPaint.setStyle(Paint.Style.FILL);mCenterPaint.setColor(c);}mRedrawHSV = true;}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {setMeasuredDimension(CENTER_X * 2, (CENTER_Y + 25) * 2);}private static final int CENTER_X = 100;private static final int CENTER_Y = 100;private static final int CENTER_RADIUS = 30;private int ave(int s, int d, float p) {return s + java.lang.Math.round(p * (d - s));}private int interpColor(int colors[], float unit) {if (unit <= 0) {return colors[0];}if (unit >= 1) {return colors[colors.length - 1];}float p = unit * (colors.length - 1);int i = (int) p;p -= i;// now p is just the fractional part [0...1) and i is the indexint c0 = colors[i];int c1 = colors[i + 1];int a = ave(Color.alpha(c0), Color.alpha(c1), p);int r = ave(Color.red(c0), Color.red(c1), p);int g = ave(Color.green(c0), Color.green(c1), p);int b = ave(Color.blue(c0), Color.blue(c1), p);return Color.argb(a, r, g, b);}private static final float PI = 3.1415926f;@Overridepublic boolean onTouchEvent(MotionEvent event) {float x = event.getX() - CENTER_X;float y = event.getY() - CENTER_Y;boolean inCenter = java.lang.Math.sqrt(x * x + y * y) <= CENTER_RADIUS;switch (event.getAction()) {case MotionEvent.ACTION_DOWN:mTrackingCenter = inCenter;if (inCenter) {mHighlightCenter = true;invalidate();break;}case MotionEvent.ACTION_MOVE:if (mTrackingCenter) {if (mHighlightCenter != inCenter) {mHighlightCenter = inCenter;invalidate();}} else if ((x >= -100 & x <= 100) && (y <= 130 && y >= 110)) // see// if// we're// in// the// hsv// slider{int a, r, g, b, c0, c1;float p;// set the center paint to this colorif (x < 0) {c0 = mHSVColors[0];c1 = mHSVColors[1];p = (x + 100) / 100;} else {c0 = mHSVColors[1];c1 = mHSVColors[2];p = x / 100;}a = ave(Color.alpha(c0), Color.alpha(c1), p);r = ave(Color.red(c0), Color.red(c1), p);g = ave(Color.green(c0), Color.green(c1), p);b = ave(Color.blue(c0), Color.blue(c1), p);mCenterPaint.setColor(Color.argb(a, r, g, b));mRedrawHSV = false;invalidate();} else {float angle = (float) java.lang.Math.atan2(y, x);// need to turn angle [-PI ... PI] into unit [0....1]float unit = angle / (2 * PI);if (unit < 0) {unit += 1;}mCenterPaint.setColor(interpColor(mColors, unit));invalidate();}break;case MotionEvent.ACTION_UP:if (mTrackingCenter) {if (inCenter) {mListener.colorChanged(mCenterPaint.getColor());}mTrackingCenter = false; // so we draw w/o haloinvalidate();}break;}return true;}}}

?

Main.java

public class Main extends PreferenceActivity {Button button;SharedPreferences sp;ListView listView;LinearLayout linearLayout;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);addPreferencesFromResource(R.xml.preference);setContentView(R.layout.main);button = (Button) findViewById(R.id.button);listView = new ListView(this);linearLayout = (LinearLayout) findViewById(R.id.line11);getColor();}public void getColor() {sp = getApplicationContext().getSharedPreferences("mycolor",Context.MODE_PRIVATE); // 获得Preferencesint color = sp.getInt("mycolor", 0);String string = String.valueOf(color);button.setText(string);button.setTextColor(color);listView.setBackgroundColor(color);linearLayout.setBackgroundColor(color);}}

?

热点排行