0

オランダの地図の画像が表示され、州を選択できる Android アプリを作成したいと考えています。各州は別のクラスに移動する必要があります。

私が見つけた最良の方法は、2つの画像でそれを行うことでした.1つはあなたが表示し、もう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

1 つの画像が他の画像の上に表示されるため、下の画像をクリックすることはできません。マップがスクロール可能でない場合は、ontouch イベントを使用すると簡単にスクロールできますが、画面の密度が異なる可能性があることに注意してください。

于 2012-11-05T14:59:05.770 に答える
0

あなたの場合の主な問題は、画面密度です。画像を座標に分割し、ontouch イベントを使用してやりたいことを実行できますが、何百万もの異なる画面密度があるため、それは困難です。言及すると、色を元に戻すコードの平和は座標にも依存します。画像の x 座標と y 座標を渡す必要があるため、色が返されるため、色は忘れてください。画面密度についてよく考え、この方法で調査を行ってください。

于 2012-11-05T15:08:07.497 に答える