更新:我找到了一个工作的答案,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?