android - 绘制自定义室内地图和位置之间的链接。对于每个位置 x,y 坐标已知要显示在屏幕上

标签 android

enter image description here

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().");
    }
    //

}

我必须绘制这样的 map ,并像在 Google map 中一样在点击任何图钉时显示叠加层。我能够在 Canvas 上绘制 View 以及点击监听器,但点击监听器操作是通过单击屏幕上的任何位置来执行的,它仅适用于最后绘制的 View 。因此,如果有任何解决方案,请告诉我。提前致谢。

最佳答案

您听说过地理围栏吗?唯一的问题是它的工作原理是圆形。但这应该没那么糟糕,因为您可以用 2 个圆圈覆盖入口,一个覆盖房间的气息并包括入口门,另一个包含在仅覆盖门的更大圆圈内。

查看 A4,我画了 2 个圆圈,不好意思。

illustration

如果用户进入较小的圆圈和较大的圆圈,他仍然在房间里。如果他进入较小的圆圈并存在(并且没有进入较大的圆圈),他就离开了房间。

Twisted 但只需最少的编码即可工作。只需阅读地理围栏。

另请注意,地理围栏现已与 LocationClient API 合并,与 LocationManager 相比,后者消耗的电池少 8 倍。所以去吧。

关于android - 绘制自定义室内地图和位置之间的链接。对于每个位置 x,y 坐标已知要显示在屏幕上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17491626/

相关文章:

javascript - 某些设备中的时区错误 - React Native

android - 检测类里面的电话 Activity

Android View 处理滚动手势但忽略触摸

Android - 将字符串经度解析为 float 导致错误

java - 带有空字段的 Parcelable 对象

android - Fragment 中 AyncTask 中的 ProgressDialog(崩溃)

android - 从内部存储中删除文件

java - 为什么我不能在 ormlite 中使用自定义 DAO 类?

android - SharedPreferences 不保存/持久化

java - canvas.drawBitmap() 不缩放图像