我想创建一个Android应用程序,您可以在其中看到荷兰地图的图像,在那里您可以选择省份。 每个省都要去另一个班级。
我找到的最好的方法是用2张图片做,1你显示,另一张完全相同,但有颜色。然后用touchEvent获取颜色,然后说它的Red是否会上课。
到目前为止,我有2张图片,一张我显示,另一张(完全相同,但每个省都有另一种颜色),这张图片让我“看不见”。
<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周,所以有点帮助会很好:)!
谢谢
答案 0 :(得分:4)
在活动的onCreate中,您可以执行类似(未测试)
的操作 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);
}
答案 1 :(得分:1)
一张图片将在另一张图片的顶部,因此您将永远无法点击底部的图片。 如果您的地图不可滚动,那么使用ontouch事件会很容易,请记住,屏幕可以有不同的密度。
答案 2 :(得分:0)
您的案例中的主要问题是屏幕密度。您可以将图像划分为坐标,然后使用ontouch事件执行您想要执行的操作,但由于数百万个不同的屏幕密度,您将很难。要提到的是,让你的背部颜色的代码平和也取决于坐标,你必须传递图像的x和y坐标,这样它会给你背部颜色,所以忘记颜色。更好地考虑屏幕密度,并以这种方式进行研究。