Интерактивное информационное окно для (Xamarin android).Доступные ответы андроид студии - PullRequest
0 голосов
/ 08 февраля 2019

Как сделать нажатие кнопки внутри информационного окна карты 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, код работает, но кнопка все еще не активна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...