1

ここに画像の説明を入力

package com.smallfan.museumexhibition.views;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.drawable.Drawable;
import android.view.View;
import android.widget.Toast;

public class CustomDrawableView extends View implements View.OnClickListener {

    Drawable drawable;
     Paint paint;
     String myText;
     int x1,y1;
     Context context;

    public CustomDrawableView(Context context, Drawable mydrawable, int x, int y, String text) {
        super(context);

        this.myText=text;
        this.x1=x;
        this.y1=y;
        this.paint = new Paint();
        this.context=context;

        drawable=mydrawable;

        drawable.setBounds(x, y, x + drawable.getMinimumWidth(), y + drawable.getMinimumHeight());

        setOnClickListener(this);
    }

    protected void onDraw(Canvas canvas) {
        drawable.draw(canvas);
    }

    @Override
    public void onClick(View v)
    { 
        v.setTag(myText);
        Toast.makeText(context, "View clicked. "+"  tag  "+ v.getTag(), Toast.LENGTH_SHORT).show();

    }
}

///////////////////////////////////////////////////

package com.smallfan.museumexhibition;

import java.io.InputStream;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;


public class MapInActivity extends Fragment
{

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        Log.v("MapInActivity", "onCreate()");
    }

    DrawView drawView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        Log.v("MapInActivity", "onCreateView()");

        View v = LayoutInflater.from(getActivity()).inflate(R.layout.indoormap_layout, null);
        RelativeLayout maplayout=(RelativeLayout)v.findViewById(R.id.maplayout);


        CustomDrawableView   mCustomDrawableView = new CustomDrawableView(getActivity(),getResources().getDrawable(R.drawable.ic_launcher),10,10,"Item 1");
        maplayout.addView(mCustomDrawableView);

        CustomDrawableView   mCustomDrawableView1 = new CustomDrawableView(getActivity(),getResources().getDrawable(R.drawable.ic_launcher),50,50,"Item 2");
        maplayout.addView(mCustomDrawableView1);

        return v;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState)
    {
        super.onActivityCreated(savedInstanceState);
        Log.v("MapInActivity", "onActivityCreated().");
    }
    //

}

このような地図を描画し、Google マップのようにピンをタップするとオーバーレイを表示する必要があります。クリック リスナーと一緒にキャンバス上にビューを描画できましたが、クリック リスナー アクションは画面上の任意の場所をクリックすることで実行され、最後に描画されたビューだけのものです。それで解決策があれば教えてください。前もって感謝します。

4

1 に答える 1

1

ジオフェンシングについて聞いたことがありますか? 唯一の問題は、円の原理で動作することです。しかし、それはそれほど悪くないはずです.2つの円で入り口を覆うことができるので、1つは部屋の息を覆い、玄関のドアを含み、もう1つの円はドアだけを覆う大きな円の中に含まれています.

A4 をご覧ください。円を 2 つ描いています。表現が見づらくて申し訳ありません。

図

ユーザーが小さい円と大きい円に入った場合、ユーザーはまだ部屋にいます。彼が小さな円に入ってそこにいる場合 (そして大きな円に入っていない場合)、彼は部屋を出たことになります。

ねじれていますが、最小限のコーディングで動作します。ジオフェンシングを読んでください。

また、ジオフェンシングは LocationClient API とマージされ、LocationManager と比較して 8 分の 1 のバッテリーしか消費しないことに注意してください。だからそれのために行きます。

于 2013-07-05T15:22:00.423 に答える