Как сделать нажатие кнопки внутри информационного окна карты Google с помощью xamarin android, я нашел несколько ответов, но они для Android Studio, я загрузил изображение макета, чтобы понять вопрос, нажмите здесь 1
private GoogleMap mMap;
private Marker marker;
private int bottomOffsetPixels;
private View infoWindow;
private Button callButton;
public void setMarker(Marker marker)
{
this.marker = this.marker;
}
private void SetupMap()
{
if (mMap == null)
{
try
{
SetContentView(Resource.Layout.markmap);
var mapFragment = (MapFragment)FragmentManager.FindFragmentById(Resource.Id.map);
mapFragment.GetMapAsync(this);
}
catch (Exception ex) { }
}
}
public void OnMapReady(GoogleMap googleMap)
{
this.mMap = googleMap;
// googleMap.MapType = GoogleMap.MapTypeHybrid;
mMap.UiSettings.ZoomControlsEnabled = true;
LatLng latlng = new LatLng(Convert.ToDouble(37.35), Convert.ToDouble(-122.2));
CameraUpdate camera = CameraUpdateFactory.NewLatLngZoom(latlng, 10);
mMap.AnimateCamera(camera);
string title1 = "jhon";
mMap.AddMarker(new MarkerOptions()
// .SetTitle("Prague")
.SetIcon(GetCustomBitmapDescriptor(title1))
.SetPosition(new LatLng(37.35,-122.2)));
mMap.SetInfoWindowAdapter(this);
}
public View GetInfoWindow(Marker marker)
{
View view = LayoutInflater.Inflate(Resource.Layout.infoWindowMarker, null, false);
return view;
}
после создания карты
public View GetInfoContents(Marker marker)
{
var inflater = Android.App.Application.Context.GetSystemService(Context.LayoutInflaterService) as Android.Views.LayoutInflater;
if (inflater != null)
{
callButton = infoWindow.FindViewById<Button>(Resource.Id.call);
this.marker = marker;
return infoWindow;
}
return null;
}
private void InfoWindowTouch(MotionEvent e)
{
switch (e.ActionMasked)
{
case MotionEventActions.Up:
int buttonLeft = ((Android.Views.View)(callButton.Parent)).Left;
int buttonTop = ((Android.Views.View)(callButton.Parent)).Top;
Rect buttonRect = new Rect(buttonLeft, buttonTop, buttonLeft + callButton.Width, buttonTop + callButton.Height);
if (buttonRect.Contains((int)e.GetX(), (int)e.GetY()))
{
int x = 0;
}
break;
default:
break;
}
}
public override bool DispatchTouchEvent(MotionEvent e)
{
if ((marker != null) && marker.IsInfoWindowShown)
{
Android.Graphics.Point point = mMap.Projection.ToScreenLocation(marker.Position);
MotionEvent copyEv = MotionEvent.Obtain(e);
copyEv.OffsetLocation(
-point.X + (infoWindow.Width / 2),
-point.Y + infoWindow.Height + ConvertDpToPx(59));
InfoWindowTouch(copyEv);
}
return base.DispatchTouchEvent(e);
}
public int ConvertDpToPx(float dp)
{
return (int)(dp * Resources.DisplayMetrics.Density + 0.5f);
}
Пытался преобразовать код Java в Android для Android Xamarin, код работает, но кнопка все еще не активна.