Android颜色选择器

参考网上文章,做了两种颜色选择器。

一种是固定颜色的选择器,这个很简单,只要画出来各种颜色区域,用户选择哪个,就选择了什么颜色。

另一种是万能颜色选择器,这个有一些算法的,所以就参考了网上的文章(由于原始出处不详,就不表示感谢了),又做了一些优化和修改。

目前的这个万能颜色选择器的功能已经足够了,也没什么可保密的,就放上来,给需要的人做个参考。喜欢就拿去好了。

import arui.csdn.generaltools.colorchooser.ColorChooserType;  
import arui.csdn.generaltools.colorchooser.OnColorChangedListener;  
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;  
/** 
 * Universal color view class. This class will draw color chooser graph. 
 *  
 * @author http://blog.csdn.net/arui319 
 *  
 */  
public class UniversalColorView extends View {  
    private Paint mPaint;  
    private Paint mCenterPaint;  
    private Paint mHSVPaint;  
    private final int[] mColors;  
    private int[] mHSVColors;  
    private boolean mRedrawHSV;  
    private OnColorChangedListener mListener;  
    private boolean mTrackingCenter;  
    private boolean mHighlightCenter;  
    private static final int CENTER_X = 100;  
    private static final int CENTER_Y = CENTER_X;  
    private static final int CENTER_RADIUS = 30;  
    private static final int OUTER_RADIUS = 100;  
    private static final int HSV_X = CENTER_X;  
    private static final int HSV_Y_TOP = CENTER_Y + 10;  
    private static final int HSV_Y_BOTOM = HSV_Y_TOP + 20;  
    private static final float PI = 3.1415926f;  
    public UniversalColorView(Context context, OnColorChangedListener listener,  
            int color) {  
        super(context);  
        this.setBackgroundColor(Color.LTGRAY);  
        mListener = listener;  
        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;  
    }  
    @Override  
    protected 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(0 - HSV_X, 0, HSV_X, 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(0 - HSV_X, HSV_Y_TOP, HSV_X, HSV_Y_BOTOM),  
                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);  
        }  
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值