如何在地图图像中创建可点击区域,每个省份执行不同的操作?

时间:2012-11-05 14:47:38

标签: android image map clickable areas

我想创建一个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周,所以有点帮助会很好:)!

谢谢

3 个答案:

答案 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坐标,这样它会给你背部颜色,所以忘记颜色。更好地考虑屏幕密度,并以这种方式进行研究。