0

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

谢谢

4

3 回答 3

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);
}
于 2012-11-05T15:41:47.543 回答
1

一个图像将位于另一个图像的顶部,因此您将永远无法单击底部的图像。如果您的地图不可滚动,使用 ontouch 事件会很容易,只需记住屏幕可以有不同的密度。

于 2012-11-05T14:59:05.770 回答
0

您的主要问题是屏幕密度。您可以将图像划分为坐标,然后使用 ontouch 事件做您想做的事情,但是由于屏幕有数百万种不同的密度,这对您来说会很困难。值得一提的是,给你带来颜色的代码的和平也取决于坐标,你必须传递图像的 x 和 y 坐标,这样它就会给你返回颜色,所以忘记颜色。最好考虑屏幕密度,并以此方式进行研究。

于 2012-11-05T15:08:07.497 回答