颜色选择类,直接使用:

package com.android.music.play; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.LinearGradient; import android.graphics.Paint; import android.graphics.RectF; import android.graphics.Shader; import android.graphics.SweepGradient; import android.view.MotionEvent; import android.view.View; import android.widget.TextView; public class ColorPickerView extends View { private static final float PI = 3.1415926f; // ���� private Paint paintCircleShadow = new Paint(Paint.ANTI_ALIAS_FLAG); private Paint paintCircle = new Paint(Paint.ANTI_ALIAS_FLAG); private Paint paintCenterShadow = new Paint(Paint.ANTI_ALIAS_FLAG); private Paint paintCenter = new Paint(Paint.ANTI_ALIAS_FLAG); private Paint paintGrayShadow = new Paint(Paint.ANTI_ALIAS_FLAG); private Paint paintGray = new Paint(Paint.ANTI_ALIAS_FLAG); private Paint paintLightShadow = new Paint(Paint.ANTI_ALIAS_FLAG); private Paint paintLight = new Paint(Paint.ANTI_ALIAS_FLAG); // private Paint paintText = new Paint(Paint.ANTI_ALIAS_FLAG); private double Zoom = 1; private int[] arrColorGray; private final int[] arrColorCircle = new int[] { 0xFFFF0000, 0xFFFF00FF, 0xFF0000FF, 0xFF00FFFF, 0xFF00FF00, 0xFFFFFF00, 0xFFFF0000 }; private boolean mRedrawHSV; private boolean IsPressCenter; private boolean IsMoveCenter; private int CenterX = 100; private int CenterY = 100; private int CenterRadius = 30; // private LDColorDialog dlg = null; private String strColor = ""; private TextView textColor; public ColorPickerView(Context context, int color, double Zoom,TextView colortext) { super(context); textColor = colortext; this.Zoom = Zoom; CenterX = (int) (100 * Zoom); CenterY = (int) (100 * Zoom); CenterRadius = (int) (30 * Zoom); paintCircleShadow.setColor(0xFF000000); paintCircleShadow.setStyle(Paint.Style.STROKE); paintCircleShadow.setStrokeWidth((float) (32 * Zoom)); paintCircle.setShader(new SweepGradient(0, 0, arrColorCircle, null)); paintCircle.setStyle(Paint.Style.STROKE); paintCircle.setStrokeWidth((float) (32 * Zoom)); paintCenterShadow.setColor(0xFF000000); paintCenterShadow.setStrokeWidth((float) (5 * Zoom)); paintCenter.setColor(color); paintCenter.setStrokeWidth((float) (5 * Zoom)); paintGrayShadow.setColor(0xFF000000); paintGrayShadow.setStrokeWidth((float) (30 * Zoom)); arrColorGray = new int[] { 0xFFFFFFFF, color, 0xFF000000 }; paintGray.setStrokeWidth((float) (30 * Zoom)); paintLightShadow.setColor(0xFF000000); paintLightShadow.setStrokeWidth((float) (60 * Zoom)); paintLight.setStrokeWidth((float) (60 * Zoom)); mRedrawHSV = true; // paintText.setColor(0xFFFFFFFF); // paintText.setAntiAlias(true); // paintText.setTextAlign(Paint.Align.CENTER); } @Override protected void onDraw(Canvas canvas) { // ��ͼ canvas.translate(CenterX, CenterY); float r = CenterX - paintCircle.getStrokeWidth() * 0.5f; // �뾶 int color = paintCenter.getColor(); textColor.setText("#" + Integer.toHexString(color).substring(2).toUpperCase()); // canvas.drawText("#" + Integer.toHexString(color).substring(2).toUpperCase(), CenterX, CenterY, paintText); strColor = "#" + Integer.toHexString(color).substring(2).toUpperCase(); if (mRedrawHSV) { arrColorGray[1] = color; paintGray.setShader(new LinearGradient(CenterX, -CenterY, CenterX, (float) (100 * Zoom), arrColorGray, null, Shader.TileMode.CLAMP)); } canvas.drawOval(new RectF(-r + 3, -r + 3, r + 3, r + 3), paintCircleShadow); canvas.drawOval(new RectF(-r, -r, r, r), paintCircle); canvas.drawCircle(3, 3, CenterRadius, paintCenterShadow); canvas.drawCircle(0, 0, CenterRadius, paintCenter); canvas.drawRect(new RectF(CenterX + (float) (18 * Zoom), -CenterY + 3, CenterX + (float) (48 * Zoom), (float) (103 * Zoom)), paintGrayShadow); // �Ҷȵȼ���Ӱ canvas.drawRect(new RectF(CenterX + (float) (15 * Zoom), -CenterY, CenterX + (float) (45 * Zoom), (float) (100 * Zoom)), paintGray); // �Ҷȵȼ� if (IsPressCenter) { paintCenter.setStyle(Paint.Style.STROKE); if (IsMoveCenter) paintCenter.setAlpha(0xFF); else // ��ָ�ƿ����� paintCenter.setAlpha(0x66); canvas.drawCircle(0, 0, CenterRadius + paintCenter.getStrokeWidth(), paintCenter); // ��Ȧ paintCenter.setStyle(Paint.Style.FILL); paintCenter.setColor(color); } mRedrawHSV = true; } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(CenterX * 2 + 50, CenterY * 2 + 23); } 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; int 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); } @Override public boolean onTouchEvent(MotionEvent event) { float x = event.getX() - CenterX; float y = event.getY() - CenterY; boolean inCenter = java.lang.Math.sqrt(x * x + y * y) <= CenterRadius; switch (event.getAction()) { case MotionEvent.ACTION_DOWN: { IsPressCenter = inCenter; if (inCenter) { IsMoveCenter = true; invalidate(); break; } } case MotionEvent.ACTION_MOVE: { if (IsPressCenter) { if (IsMoveCenter != inCenter) { IsMoveCenter = inCenter; invalidate(); } } else if ((x >= -CenterX && x <= CenterX) && (y >= -CenterY && y <= CenterY)) { float angle = (float) java.lang.Math.atan2(y, x); float unit = angle / (2 * PI); if (unit < 0) unit += 1; paintCenter.setColor(interpColor(arrColorCircle, unit)); invalidate(); } else { int a, r, g, b, c0, c1; float p; if (y < 0) { c0 = arrColorGray[0]; c1 = arrColorGray[1]; p = (y + 100) / 100; } else { c0 = arrColorGray[1]; c1 = arrColorGray[2]; p = y / 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); paintCenter.setColor(Color.argb(a, r, g, b)); mRedrawHSV = false; invalidate(); } break; } case MotionEvent.ACTION_UP: { if (IsPressCenter) { IsPressCenter = false; invalidate(); } break; } } return true; } public Paint getPaintCircleShadow() { return paintCircleShadow; } public void setPaintCircleShadow(Paint paintCircleShadow) { this.paintCircleShadow = paintCircleShadow; } public Paint getPaintCircle() { return paintCircle; } public void setPaintCircle(Paint paintCircle) { this.paintCircle = paintCircle; } public Paint getPaintCenterShadow() { return paintCenterShadow; } public void setPaintCenterShadow(Paint paintCenterShadow) { this.paintCenterShadow = paintCenterShadow; } public Paint getPaintCenter() { return paintCenter; } public void setPaintCenter(Paint paintCenter) { this.paintCenter = paintCenter; } public Paint getPaintGrayShadow() { return paintGrayShadow; } public void setPaintGrayShadow(Paint paintGrayShadow) { this.paintGrayShadow = paintGrayShadow; } public Paint getPaintGray() { return paintGray; } public void setPaintGray(Paint paintGray) { this.paintGray = paintGray; } public int[] getArrColorGray() { return arrColorGray; } public void setArrColorGray(int[] arrColorGray) { this.arrColorGray = arrColorGray; } public boolean ismRedrawHSV() { return mRedrawHSV; } public void setmRedrawHSV(boolean mRedrawHSV) { this.mRedrawHSV = mRedrawHSV; } public boolean isIsPressCenter() { return IsPressCenter; } public void setIsPressCenter(boolean isPressCenter) { IsPressCenter = isPressCenter; } public boolean isIsMoveCenter() { return IsMoveCenter; } public void setIsMoveCenter(boolean isMoveCenter) { IsMoveCenter = isMoveCenter; } public int[] getArrColorCircle() { return arrColorCircle; } public String getStrColor() { return strColor; } public void setStrColor(String strColor) { this.strColor = strColor; } public double getZoom() { return Zoom; } public void setZoom(double zoom) { Zoom = zoom; } }

使用代码:

LinearLayout layout = new LinearLayout(MediaPlayActivity.this); layout.setOrientation(LinearLayout.VERTICAL); final TextView colorText = new TextView(MediaPlayActivity.this); ColorPickerView colorPick = new ColorPickerView(MediaPlayActivity.this,Color.parseColor("#FFFFFF"), 0.8,colorText); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.MATCH_PARENT); lp.gravity = Gravity.CENTER_HORIZONTAL; layout.addView(colorPick, lp); layout.addView(colorText,lp); AlertDialog mAlertDialog = new AlertDialog.Builder(MediaPlayActivity.this) .setTitle("choose a color") .setView(layout) .setPositiveButton(getString(R.string.dialog_color_OK), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { Log.d(TAG,"the color choose is "+colorText.getText()); } }) .setNegativeButton(getString(R.string.dialog_color_cancle), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }) .create();

android 颜色选择类相关推荐

  1. android颜色选择状态,androidUiAutomator如何根据颜色判断控件的状态

    本人在用UiAutomator做测试的时候,经常会遇到一些控件因为不同的条件显示不同的颜色,在学习了UiAutomator图像处理之后,自己尝试写了一个方法来处理不同颜色控件的区分.分享代码供大家参考 ...

  2. Android 购物选择颜色(尺码)实现(一)

    好久都没写博客了,一直忙于公司的项目,这几天有时间所以写点东西,和大家相互学习一下!写的不好的话,还望见谅! 在公司做的项目一直是有关手机购物方面的,所以就会碰到购买东西时,需要选择商品的颜色.尺码. ...

  3. android类中定义颜色,自定义实现简单的Android颜色选择器(附带源码)

    在写Android App过程中需要一个简单的颜色选择器,Android自带的ColorPicker和网上的一些ColorPicker都太高端了,都实现了颜色渐变功能,我要的不需要那么复杂,只想提供几 ...

  4. Android颜色转换工具类ColorUtil

    项目中需要根据ScrollView的滚动距离来动态设置Topbar的背景透明度,网上有类似的开源库FadingActionBar,使用的是ActionBar做的.而我的项目中并没有使用ActionBa ...

  5. Android 仿PhotoShop调色板应用(四) 不同区域颜色选择的颜色生成响应

     Android 仿PhotoShop调色板应用(四) 不同区域颜色选择的颜色生成响应  上一篇讲过了主体界面的绘制,这里讲解调色板应用中的另外一个核心: 颜色选择及生成. ColorPcikerVi ...

  6. Android 颜色渲染(二) 颜色区域划分原理与实现思路

    在前面的系列我已经将Android中颜色渲染的原理及使用做了一个整体上概述. 现在开始根据一个比较复杂的实现进行具体的分析,这就是PhotoShop中的调色板应用 首先还是看一下最终的实现效果:    ...

  7. Android开发工具类集合

    各种帮助类汇总:https://github.com/Blankj/AndroidUtilCode 常用的 ios 风格 dialog 和 meterial design 风格的 dialog:htt ...

  8. Android -- Log日志调试(android.utl.log类)

    Android调试要通过模拟器运行,或者直接USB远程连接到一部手机调试.即使在不关闭模拟进行调试时候,也要经过编译.apk打包.上传apk.运行apk的过程,时间也不短,所以应该在程序固定一次运行中 ...

  9. 分享一些收集整理的一些常用Android万能工具类

    尊重原创  https://github.com/l123456789jy/Lazy 内容包括 AnimationUtils 动画工具类 AppUtils APP相关信息工具类 AssetDataba ...

最新文章

  1. HTML超出部分滚动效果 HTML滚动 HTML下拉 附效果图
  2. Elasticsearch: 权威指南 » 聚合 » Doc Values and Fielddata » 聚合与分析
  3. 近乎于“妖”!浅谈《山海镜花》的美术风格与设计
  4. android NDK 知识汇总
  5. 高等数学下-赵立军-北京大学出版社-题解-练习9.3
  6. bcache使用教程
  7. C++持有Object-C对象时容易内存泄露
  8. SNPE安装+Qualcomm高通AI神经网络处理SDK部署流程
  9. 圆弧裁剪算法c++_箍筋算法之争:按外皮长度计算与按中心线长度计算究竟相差多少?...
  10. db2dual_db2 oracle 创建 序列 | 学步园
  11. Thread中interrupt()interrupted()和isInterrupted()的区别
  12. 最简单的List集合排序方法
  13. JFLASH添加华大型号详细教程
  14. win7,win8系统为什么灵格斯老与office,adobe等软件冲突,怎么解决
  15. 最新版esight安装(sql_server安装+esight超级详细)
  16. 浏览器支持H.265解码总结
  17. 金融工程第十一章BSM模型复习
  18. 浏览器插件——轻松、快速下载网站源代码
  19. java计算长方体面积和周长
  20. 【图像增强】Frangi滤波器血管图像增强【含Matlab源码 2108期】

热门文章

  1. vue-element超初级教学
  2. 《Puppet实战手册》——2.5 使用标准的命名约定
  3. oracle 分区表进行shrink操作
  4. EBS_FORM_开发:关于切换不同BLOCK的时候弹出需要保存的窗口
  5. ECMAScript 6新特性介绍
  6. Ubuntu自定义服务
  7. mcollective的web控制台---mcomaster搭建
  8. Vue 单选框与单选框组 组件
  9. nginx 优化,突破十万并发
  10. 2018程序员必备的4大网站推荐(代码、编程、SQL等)