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 个圆圈,不好意思。
如果用户进入较小的圆圈和较大的圆圈,他仍然在房间里。如果他进入较小的圆圈并存在(并且没有进入较大的圆圈),他就离开了房间。
Twisted 但只需最少的编码即可工作。只需阅读地理围栏。
另请注意,地理围栏现已与 LocationClient API 合并,与 LocationManager 相比,后者消耗的电池少 8 倍。所以去吧。
关于android - 绘制自定义室内地图和位置之间的链接。对于每个位置 x,y 坐标已知要显示在屏幕上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17491626/