Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试在每次单击时显示颜色名称检查我的代码_Java_Android_Android Activity_Colors - Fatal编程技术网

Java 尝试在每次单击时显示颜色名称检查我的代码

Java 尝试在每次单击时显示颜色名称检查我的代码,java,android,android-activity,colors,Java,Android,Android Activity,Colors,我在我的游戏中有这样一个部分,圆圈绘制不同的颜色,我希望玩家能够在Toast上显示的每次点击中看到颜色名称,我如何才能做到这一点?我的代码如下。如果有任何帮助,我们将不胜感激?我想以字符串形式显示它们,例如,如果RGB为红色,则显示红色的字符串通知 static int x,y,r=255,g=255,b=255; final static int radius=180; Paint paint; public Circle(Context context) {

我在我的游戏中有这样一个部分,圆圈绘制不同的颜色,我希望玩家能够在
Toast
上显示的每次点击中看到颜色名称,我如何才能做到这一点?我的代码如下。如果有任何帮助,我们将不胜感激?我想以字符串形式显示它们,例如,如果RGB为红色,则显示红色的字符串通知

static int x,y,r=255,g=255,b=255;
    final static int radius=180;
    Paint paint;

    public Circle(Context context)
    {
        super(context);
        paint=new Paint();
        paint.setAntiAlias(true);
        paint.setARGB(255, r, g, b);


        setFocusable(true);


        this.setOnTouchListener(this);
    }


    public void onDraw(Canvas canvas)
    {
        paint.setARGB(255, r, g, b);


        canvas.drawCircle(x,y,radius,paint);

    }

如果希望将颜色名称与RGB值严格匹配,则需要将随机RGB与所选的已知颜色匹配。例如,您可以使用ColorUtils类执行以下操作:

class ColorUtils{

public static final Map<String, int[]> COLOR_MAP;

static{
    COLOR_MAP = new HashMap<>();
    COLOR_MAP.put("red",  new int[]{255,0,0});
    COLOR_MAP.put("blue", new int[]{0, 0, 255});
    COLOR_MAP.put("green", new int[]{0, 255,0});
    ...
    ...   //add more colors here
}

public static double findDist(int[] rgb, int[] color){
    int deltaR = color[0] - rgb[0];
    int deltaG = color[1] - rgb[1];
    int deltaB = color[2] - rgb[2];
    return (Math.pow(deltaR, 2) + Math.pow(deltaG, 2) + Math.pow(deltaB, 2));
}

public static String findClosestColor(int[] rgb, Map<String, int[]> colorMap){
    int min = Integer.MAX_VALUE;
    String color = null;
    double dist;
    for(Entry<String, int[]> entry : colorMap.entrySet()){
        dist = findDist(rgb, entry.getValue());
        if(dist < min){
            dist = min;
            color = entry.getKey();
        }
    }
    return color;
}
}
供您在Android中测试:

 public boolean onTouch(View view,MotionEvent event){
    x=(int)event.getX()-(radius/2);
    y=(int)event.getY()-(radius/2);
    randColor();
    invalidate();
    Toast.makeText(getContext(), 
        ColorUtils.findClosestColor(new int[]{r, g, b}, ColorUtils.COLOR_MAP), Toast.LENGTH_LONG).show();
    return true;
}
为了方便起见,将这两个方法添加到实用程序类中,并静态创建颜色映射,在其中使用希望向用户表示的颜色填充它。据我所知,没有已知的库能够将RGB映射到Java中易于访问的颜色。我可能错了,但我也认为这是你最好的方式

注意:最好将Toast.makeText()调用作为另一个方法存储在单独的utils类中(如果我使用Toast,我会这样做),这样可以稍微清理代码

class AndroidUtils{

    public static void createToast(Context context, String str){
        Toast.makeText(context, str, Toast.LENGTH_LONG).show();
    }

}
那么就把这叫做上面的祝酒词:

AndroidUtils.createToast(getContext(), ColorUtils.findClosestColor(new int[]{r, g, b}, ColorUtils.COLOR_MAP));

当你说“获取颜色”时,你是指字符串形式的名称还是仅指RGB值?示例:红色vs.R:255,B:0,G:0有什么帮助吗?我怎样才能做到?是的!等一下,我现在就回答这个问题,这是有道理的,但我不明白最后一个(像这样的测试)是什么意思?对不起,这确实是针对Android的,所以也许我应该给你一个更好的例子来测试。。一秒钟。(我用本机java编写这篇文章只是因为它更容易)对,它是经过编辑的。您应该可以访问getContext(),因为我假设Circle是View类型
AndroidUtils.createToast(getContext(), ColorUtils.findClosestColor(new int[]{r, g, b}, ColorUtils.COLOR_MAP));