package com.example.android8;import color.ColorPickerDialog;import color.ColorPickerDialog.OnColorChangedListener;import android.os.Bundle;import android.app.Activity;import android.graphics.Color;import android.graphics.Paint;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class SelectColor extends Activity{private ColorPickerDialog.OnColorChangedListener change;private Paint mPaint;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.select_color);init();Button b = (Button) findViewById(R.id.button1);b.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){new ColorPickerDialog(SelectColor.this,change , Color.RED).show();}});}public void init(){mPaint=new Paint();change=new OnColorChangedListener(){@Overridepublic void colorChanged(int color){mPaint.setColor(color);TextView t=(TextView) findViewById(R.id.textView1);t.setTextColor(mPaint.getColor());t.setText("您选择的颜色是:"+mPaint.getColor());}};}}package color;import android.os.Bundle;import android.app.Dialog;import android.content.Context;import android.graphics.*;import android.view.MotionEvent;import android.view.View;public class ColorPickerDialog extends Dialog {public interface OnColorChangedListener {void colorChanged(int color);}public ColorPickerDialog(Context context){super(context);}private OnColorChangedListener mListener;private int mInitialColor;private static class ColorPickerView extends View {private Paint mPaint;private Paint mCenterPaint;private final int[] mColors;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(32);mCenterPaint = new Paint(Paint.ANTI_ALIAS_FLAG);mCenterPaint.setColor(color);mCenterPaint.setStrokeWidth(5);}private boolean mTrackingCenter;private boolean mHighlightCenter;@Overrideprotected void onDraw(Canvas canvas) {float r = CENTER_X - mPaint.getStrokeWidth()*0.5f;canvas.translate(CENTER_X, CENTER_X);canvas.drawOval(new RectF(-r, -r, r, r), mPaint);canvas.drawCircle(0, 0, CENTER_RADIUS, mCenterPaint);if (mTrackingCenter) {int c = mCenterPaint.getColor();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);}}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {setMeasuredDimension(CENTER_X*2, CENTER_Y*2);}private static final int CENTER_X = 100;private static final int CENTER_Y = 100;private static final int CENTER_RADIUS = 32;private int floatToByte(float x) {int n = java.lang.Math.round(x);return n;}private int pinToByte(int n) {if (n < 0) {n = 0;} else if (n > 255) {n = 255;}return n;}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 int rotateColor(int color, float rad) {float deg = rad * 180 / 3.1415927f;int r = Color.red(color);int g = Color.green(color);int b = Color.blue(color);ColorMatrix cm = new ColorMatrix();ColorMatrix tmp = new ColorMatrix();cm.setRGB2YUV();tmp.setRotate(0, deg);cm.postConcat(tmp);tmp.setYUV2RGB();cm.postConcat(tmp);final float[] a = cm.getArray();int ir = floatToByte(a[0] * r + a[1] * g + a[2] * b);int ig = floatToByte(a[5] * r + a[6] * g + a[7] * b);int ib = floatToByte(a[10] * r + a[11] * g + a[12] * b);return Color.argb(Color.alpha(color), pinToByte(ir),pinToByte(ig), pinToByte(ib));}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 {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;}}public ColorPickerDialog(Context context,OnColorChangedListener listener,int initialColor) {super(context);mListener = listener;mInitialColor = initialColor;}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);OnColorChangedListener l = new OnColorChangedListener() {public void colorChanged(int color) {mListener.colorChanged(color);dismiss();}};setContentView(new ColorPickerView(getContext(), l, mInitialColor));setTitle("Pick a Color");}}android <wbr>颜色选择器

android <wbr>颜色选择器

xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".SelectColor" >android:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:layout_centerVertical="true"android:text="Button" />android:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_above="@+id/button1"android:layout_centerHorizontal="true"android:layout_marginBottom="40dp"android:text="TextView" />


更多相关文章

  1. Android颜色值XML文件
  2. Android如何使用XML创建一个环形渐变颜色图片
  3. 一对一直播系统开发Android ProgressBar圆形进度条颜色设置
  4. Android中的颜色
  5. Android颜色对照表
  6. 点击button然后改变其中文字的颜色
  7. Android一个textview显示多段文本不同颜色并可以响应点击事件
  8. [Android UI界面] 求助大神!selector怎么做到点击后保持某个颜色
  9. Android 利用drawable中的gradient属性实现背景颜色渐变

随机推荐

  1. Spring Boot日志框架实践
  2. 如何使用Web Share API[每日前端夜话0x84
  3. 理解算法的时间复杂度[每日前端夜话0x82]
  4. 高效编写Dockerfile的几条准则
  5. Svelte 3 快速开发指南(对比React与vue)[
  6. React 的未来,与 Suspense 同行[每日前端
  7. Docker Swarm的前世今生
  8. 用Vue.js在浏览器中裁剪图像[每日前端夜
  9. 操作系统分配存储时网络无法正常连接
  10. SpringBoot 中 @SpringBootApplication注