Почему MapFragment не распознается визуальной студией? - PullRequest
0 голосов
/ 28 января 2020

У меня есть карта внутри прокрутки, и когда мы пытаемся прокрутить карту, появляется вид прокрутки, который прокручивает сам, но не карту. Я пытаюсь решить эту проблему с помощью кода, который я нашел в Google, но Visual Studio показывает некоторые ошибки:

Error CS0246: The type or namespace name 'MapFragment' could not be found 
(are you missing a using directive or an assembly reference?) (CS0246) (MasterDetailPageNavigation)

и

Error CS0115: 'TouchableMapFragment.OnCreateView(LayoutInflater, ViewGroup, Bundle)': no suitable method found to override (CS0115) (MasterDetailPageNavigation)
using System;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Util;
using Android.Views;
using Android.Widget;
//using Xamarin.Forms.Maps;

namespace MasterDetailPageNavigation
{
    public class TouchableMapFragment : MapFragment
    {
        public event EventHandler TouchDown;
        public event EventHandler TouchUp;

        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            var root = base.OnCreateView(inflater, container, savedInstanceState);
            var wrapper = new TouchableWrapper(Activity);
            wrapper.SetBackgroundColor(Resources.GetColor(Android.Resource.Color.Transparent));
            ((ViewGroup)root).AddView(wrapper,
              new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.MatchParent));

            wrapper.TouchUp = () =>
            {
                if (TouchUp != null)
                    TouchUp(this, EventArgs.Empty);
            };
            wrapper.TouchDown = () =>
            {
                if (TouchDown != null)
                    TouchDown(this, EventArgs.Empty);
            };

            return root;
        }

        class TouchableWrapper : FrameLayout
        {
            public Action TouchDown;
            public Action TouchUp;

            #region ctors
            protected TouchableWrapper(IntPtr javaReference, JniHandleOwnership transfer)
              : base(javaReference, transfer) { }
            public TouchableWrapper(Context context)
              : this(context, null) { }
            public TouchableWrapper(Context context, IAttributeSet attrs)
              : this(context, attrs, 0) { }
            public TouchableWrapper(Context context, IAttributeSet attrs, int defStyle)
              : base(context, attrs, defStyle) { }
            #endregion

            public override bool DispatchTouchEvent(MotionEvent e)
            {
                switch (e.Action)
                {
                    case MotionEventActions.Down:
                        if (TouchDown != null)
                            TouchDown();
                        break;
                    case MotionEventActions.Cancel:
                    case MotionEventActions.Up:
                        if (TouchUp != null)
                            TouchUp();
                        break;
                }

                return base.DispatchTouchEvent(e);
            }
        }
    }
}

Также этот код имеет файл .A XML, который я включу ниже, но я никогда раньше не использовал что-то подобное, я работаю с XAML из Xamarin, где я должен поместить этот xml?

xaml Я говорил о:

<?xml version="1.0" encoding="utf-8"?>
<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/scroll">
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="wrap_content"
        android:layout_height="match_parent">
        <fragment
            android:id="@+id/map"
            android:layout_width="600dp"
            android:layout_height="match_parent"
            android:name="my.awesome.namespace.TouchableMapFragment" />
    </LinearLayout>
</HorizontalScrollView>

Извините, если это глупый вопрос, но я учусь в одиночестве, и это немного сложно.

1 Ответ

2 голосов
/ 28 января 2020

Вам необходимо установить пакет Xamarin.GooglePlayServices.Maps от NuGet.

Пакет Xamarin.GooglePlayServices.Maps содержит привязки Xamarin. Android для Google Play Сервисы API Карт. Чтобы добавить пакет Google Play Services Map, щелкните правой кнопкой мыши папку References вашего проекта в обозревателе решений и выберите Управление пакетами NuGet ...:

Подробные инструкции по установке можно получить. этот пакет из документа .

После установки пакета используйте пространство имен Android.Gms.Maps, MapFragment - это класс в пространстве имен Android.Gms.Maps:

using Android.Gms.Maps;
...