Почему метод переопределения OnTouchEvent () ViewRender не срабатывает? - PullRequest
0 голосов
/ 26 мая 2020

Код: это мой собственный GridViewRenderer, который содержит элемент управления scrollview.

public class CustomGridViewRenderer : ViewRenderer<Grid, Android.Widget.GridView>
{
public override bool OnTouchEvent(global::Android.Views.MotionEvent events)
{
**//This event is not firing**
}
}

Это происходит в xamarin. android

1 Ответ

0 голосов
/ 27 мая 2020

Если вы поместите Scrollview в пользовательский GridView, когда вы коснетесь этого пользовательского GridView, ScrollView получит фокус, поэтому ваш OnTouchEvent не может быть выполнен.

Мы можем установить отступ для пользовательского GridView как показано в следующем коде. Чтобы продемонстрировать приведенный выше вывод, я установил для пользовательского цвета фона GridView значение Green, а для ScrollView backgroundColor значение Red

 <minitormediamanager:CustomGridView Margin="20,35,20,20"  Padding="20" BackgroundColor="Green">
            <ScrollView  HeightRequest="50" BackgroundColor="Red">
                <StackLayout>
                    <Label Text="By default, a Grid contains one row and one column." />
                    <Label Text="By default, a Grid contains one row and one column." />
                    <Label Text="By default, a Grid contains one row and one column." />
                    <Label Text="By default, a Grid contains one row and one column." />
                    <Label Text="By default, a Grid contains one row and one column." />
                    <Label Text="By default, a Grid contains one row and one column." />
                    <Label Text="By default, a Grid contains one row and one column." />
                    <Label Text="By default, a Grid contains one row and one column." />
                    <Label Text="By default, a Grid contains one row and one column." />
                </StackLayout>
            </ScrollView>
          
        </minitormediamanager:CustomGridView>

Вот мой Grid код customRenderer.

[assembly: ExportRenderer(typeof(MinitorMediaManager.CustomGridView), typeof(CustomGridViewRenderer))]
namespace MinitorMediaManager.Droid
{
    //  <Xamarin.Forms.Grid, Android.Views.View>
    public class CustomGridViewRenderer : ViewRenderer<MinitorMediaManager.CustomGridView, Android.Views.View>
    {

         public CustomGridViewRenderer(Context context) : base(context)
        {

        }

        public override bool OnTouchEvent(MotionEvent e)
        {
            Console.WriteLine("xxxxxxxxxxxxxxxxxxxxxxxxxx");
            return base.OnTouchEvent(e);

        }
    }
}

Вы можете увидеть следующий бегущий GIF. Если я прокручиваю или щелкаю ScrollView (красный фон), OnTouchEvent не будет выполняться, но если я щелкну заполнение GridView (зеленый фон), OnTouchEvent будет выполнено.

введите описание изображения здесь

В конце концов, если вы хотите добиться события касания, это можно сделать в дочерних элементах управления, не добавляйте GirdView или StackLayout (если у вас нет отступов) ..

...