如何在每个省在地图图像中进行可单击的区域执行不同的行动



我想制作一个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坐标,然后它会给您带来后背的颜色,因此忘记了颜色。更好地考虑屏幕密度,并以这种方式进行研究。

相关内容

  • 没有找到相关文章

最新更新