Android Bitmap getPixel(x, y)打印非常奇怪的十六进制值



更新:我找到了一个工作的答案,Android:如何使每个国家产生不同的动作可点击的地图图像?

我试图做一些测试,对图像的不同部分有不同的效果被点击:http://postimg.org/image/pwrcc7pyh/

例如,当我点击具有十六进制FFFF00的沙特阿拉伯时,getPixel(x, y)打印出-256(我不知道这是否正确)。问题是也门也打印出-256,但十六进制是9EFA69。有人知道为什么会这样吗?

 ImageButton ib = (ImageButton) findViewById(R.id.middle);
    final Bitmap theBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.middle_east);  
    ib.setImageBitmap(theBitmap);
    ib.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            int eventPadTouch = event.getAction();
            switch (eventPadTouch) {
                case MotionEvent.ACTION_DOWN:
                    if (event.getX()>=0 & event.getY()>=0 & event.getX()<theBitmap.getWidth() & event.getY()<theBitmap.getHeight()) { // ** Makes sure that X and Y are not less than 0, and no more than the height and width of the image.    
                        int pixColor = theBitmap.getPixel((int)event.getX(),(int)event.getY());
                        String country = null;
                        Log.e("MainActivity", pixColor + "");
                        if (pixColor == getResources().getColor(R.color.yellow)) country = "Saudi Arabia";
                        else if (pixColor == getResources().getColor(R.color.light_green)) country = "Yemen";
                        else if (pixColor == getResources().getColor(R.color.dark_yellow)) country = "Oman";
                        else if (pixColor == getResources().getColor(R.color.banana_yellow)) country = "Syria";
                        else if (pixColor == getResources().getColor(R.color.golden_yellow)) country = "Iraq";
                        if (country != null)
                        {
                            Log.e("MainActivty", country + " " + pixColor);
                            Toast t = Toast.makeText(MainActivity.this, country, Toast.LENGTH_SHORT);
                            t.show();
                        }
                    }
                    return true;                
            }           
            return false;
        }
    });

谢谢:)

在您的if语句中,您正在使用以确保返回值iz高于0,您正在使用按位'&'操作符而不是逻辑'&&'操作符,这将具有您想要的效果。

让我知道这是否有帮助!

首先,图像无法看到,常量值:-256 (0xffffff00)是黄色https://developer.android.com/reference/android/graphics/Color.html使用以下代码将值转换为十六进制值

String hexColor = String.format("#%06X", (0xFFFFFF & intColor));

查看链接:

如何将颜色整数转换为十六进制字符串在Android?

最新更新