国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php开源 > 综合技术 > 颜色选择器

颜色选择器

来源:程序员人生   发布时间:2017-02-14 08:41:56 阅读次数:3799次

talk is cheap ,show your pic

色彩选择器,首先想用progressbar去渲染,后来觉得太麻烦了,直接自定义view了,关键还是对progressbar深入不多。

首先看看我们需要甚么,这么多色彩,还有渐变效果,1脸懵逼,别怕,我们有着色器LinearGradient,不会玩的先去找度娘玩1圈再来,色彩嘛,直接找出图中视图中的纯色。

private static final int[] COLORS = new int[]{0xFFFFFFFF, 0xFFFF0000, 0xFFFF00FF,
0xFF0000FF, 0xFF00FFFF, 0xFF00FF00, 0xFFFFFF00, 0xFF000000};

再来分析下,这里我们需要画几个圆,再画圆角矩形,,还要对滑动做1下运动区间,左右左右出去就不好了

public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction()) {//点击时
        case MotionEvent.ACTION_DOWN:
            currentOffset = (int) event.getX();
            if (currentOffset <= thumbRadius+ScreemHelper.dp2px(context,60)) currentOffset = thumbRadius+ScreemHelper.dp2px(context,60);
            if (currentOffset >= barWidth + thumbRadius+ScreemHelper.dp2px(context,60))
                currentOffset = barWidth + thumbRadius+ScreemHelper.dp2px(context,60);
            STATUS = STATUS_CHANGE;
            break;
        case MotionEvent.ACTION_MOVE:
            currentOffset = (int) event.getX();
            if (currentOffset <= thumbRadius+ScreemHelper.dp2px(context,60)) currentOffset = thumbRadius+ScreemHelper.dp2px(context,60);
            if (currentOffset >= barWidth + thumbRadius+ScreemHelper.dp2px(context,60))
                currentOffset = barWidth +       thumbRadius+ScreemHelper.dp2px(context,60);
            break;

    }
    invalidate();
    return true;
}
这里ScreemHelper是对dp转换px的工具类。。。。。

转动条的渲染

barPaint.setShader(
new LinearGradient(startX, startY + barHeight / 2,
startX + barWidth, startY + barHeight / 2,
COLORS, null, Shader.TileMode.CLAMP));

玩好了这些难道就完了?色彩咋取昵

     int unit = barWidth / (COLORS.length - 1);
    int position = currentOffset - thumbRadius-ScreemHelper.dp2px(context,60);
    int i = position / unit;
    int step = position % unit;
    if (i >= COLORS.length - 1) return COLORS[COLORS.length - 1];
    int c0 = COLORS[i];
    int c1 = COLORS[i + 1];

    int a = ave(Color.alpha(c0), Color.alpha(c1), unit, step);
    int r = ave(Color.red(c0), Color.red(c1), unit, step);
    int g = ave(Color.green(c0), Color.green(c1), unit, step);
    int b = ave(Color.blue(c0), Color.blue(c1), unit, step);

    return Color.rgb(r, g, b);
    or(看你需要哪个了)
    return Color.argb(a,r, g, b);
要想实时知道它的行迹我们就需要开个后门,加1个色彩变换监听器接口。。。。
     public interface onColorChangeListener {
    void onColorChange(int color);
}

生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生