我想制作一个Android应用,您可以在其中看到荷兰地图的图像,您可以选择一个省。每个省都必须去另一堂课。
我发现的最好方法是用2张图像,1个显示,另一张图像完全相同但带有颜色。而不是用触摸即可获得颜色,让我们说是否红色上课。
到目前为止<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="#ffffff" >
<ImageView
android:id="@+id/img_bg"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="fitXY"
android:src="@drawable/nl_clickable_original" />
<ImageView
android:id="@+id/img_hitbox"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="fitXY"
android:src="@drawable/nl_clickable"
android:visibility="invisible" />
</FrameLayout>
但是现在我不知道该如何进一步。
我在stackoverflow上找到了一些代码,这些代码应该从图像中获取颜色,但我没有如何实现。
private int getColour(int x, int y) {
ImageView img = (ImageView) findViewById(R.id.img_hitbox);
img.setDrawingCacheEnabled(true);
Bitmap hotspots = Bitmap.createBitmap(img.getDrawingCache());
img.setDrawingCacheEnabled(false);
return hotspots.getPixel(x, y);
}
我是正确的方式还是有更好的想法如何做到这一点?
我现在正在搜索1周,所以有点帮助会很好:)!
谢谢
在活动的量中,您可以做类似(未测试)
之类的事情 ImageView img = (ImageView) findViewById(R.id.img_bg);
img.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP){
int x = (int) event.getX();
int y = (int) event.getY();
int colour = getColour( x, y);
//switch to correct province
}
return true;
}
});
我不确定getColour是否可以正确使用(或隐藏的视图)视图。一种替代方法是做类似(未测试)
之类的事情private int getColour( int x, int y)
{
ImageView img = (ImageView) findViewById(R.id.img_bg);
Drawable d = getResources().getDrawable(R.drawable.nl_clickable);
Bitmap b1 =((BitmapDrawable)d).getBitmap();
//scale loaded bitmap to same resolution as visible view
Bitmap hotspots = Bitmap.createScaledBitmap(b1, img.getWidth(), img.getHeight(), false);
return hotspots.getPixel(x, y);
}
一个图像将位于另一个图像,因此您将永远无法单击一个a底部。如果您的地图不可滚动,则在OnTouch事件中很容易,请记住屏幕可以具有不同的密度。
您情况下的主要问题是屏幕密度。您可以将图像分为坐标,然后使用OnTouch事件执行您想做的事情,但是由于有数百万个不同的屏幕密度,您将很难。提到,使您背部颜色的代码和平也取决于坐标,您必须通过图像的X和Y坐标传递X和Y坐标,然后它会给您带来后背的颜色,因此忘记了颜色。更好地考虑屏幕密度,并以这种方式进行研究。