点击图片取该处色or颜色选择器简单实现方法

如图需求
这里写图片描述

当时是准备如图绘制,但要美工给颜色渐变规则和颜色代码时候,她说给你一张图你直接取就行了。细想一下确实可以实现。
提示图片不要使用wrap_content,会失去比例

思路大致如下
1. 任意图片
2. 转bitmap
3. ontouch获取相对图片坐标取RGB
4. RGB转16进制
5. 不同手机分辨率的适配(bitmap长度和实际长度是不一样的)

  mIvColor.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {


                //根据坐标获取
                ImageView imageView = ((ImageView) v);
                Bitmap bitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
//实际点击位置和图片的位置对应的关系
                float scale = (float) bitmap.getWidth()/ imageView.getWidth();

  //获取颜色              int color= bitmap.getPixel((int) (event.getX()*scale), (int)  (event.getY()*scale));

                int redValue = Color.red(color);
                int blueValue = Color.blue(color);
                int greenValue = Color.green(color);
                int alpha = Color.alpha(color);

//文本显示得到的RGB
//文本显示得到的16进制颜色代码
                mTvRgb.setText("RGB:" + redValue + "," + greenValue + "," + blueValue
                +"\n"+ColorManager.RGBTo16(redValue,greenValue,blueValue)
                        +"\n"   + "Alpha:" + alpha);
//显示得到的颜色               mLlColorShow.setBackgroundColor(Color.argb(alpha, redValue, greenValue, blueValue));

                ULog.e("x---"+event.getX()+"y---"+event.getY());

                return false;
            }
        });

RGB转16进制

    /**
     * RGB转16进制
     * @param r
     * @param g
     * @param b
     * @return
     */
    public static String RGBTo16(int r,int g,int b){
        // 如果次序是RRGGBB

        //10进制
       long c = r << 16 | g << 8 | b;

        //16进制
        return "HEX:"+"#"+Long.toHexString(c);
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值