2016-11-05 3 views
0

Я добавил пользовательский LongPressGestureRecognizer в корневой макет ViewCell для обработки определенных случаев, но после его добавления я обнаружил, что эффект пульсации при нажатии на ViewCell отсутствует на Android. Я пытался добавить обратно анимацию, получая нативный вид, установить фон рисует в Android.Resource.Attribute.SelectableItemBackground, используя ниже кодаЭффект пульсации после добавления TapGestureRecognizer в ViewCell

  int[] attrs = { Android.Resource.Attribute.SelectableItemBackground }; 

      var ta = CrossCurrentActivity.Current.Activity.ObtainStyledAttributes(attrs); 

      var drawable = ta.GetDrawable(0); 
      nativeView.SetBackgroundDrawable(drawable); 
      ta.Recycle(); 

Даже это не работает. Любой другой способ заставить его работать?

ответ

0

Для тех, кто хочет знать, я отбросил пользовательский длинный путь распознавания жестов для достижения цели, поскольку это неправильный способ делать вещи. На Android мы должны использовать событие ItemLongClick. Вот что я сделал, во-первых, узнал родной ListView с помощью какого-то метода, мой способ сначала получить рендерер ListView, а затем получить базовый ListView. Другой способ заключается в использовании кода ниже, чтобы найти ListView, но этот способ требует больше работы, если у вас есть несколько ListView

public static List<T> FindViews<T>(this ViewGroup viewGroup) where T : View 
    { 
     var result = new List<T>(); 

     var count = viewGroup.ChildCount; 
     for (int i = 0; i < count; i++) 
     { 
      var child = viewGroup.GetChildAt(i); 
      var item = child as T; 
      if (item != null) 
      { 
       result.Add(item); 
      } 
      else if (child is ViewGroup) 
      { 
       var innerResult = FindViews<T>(child as ViewGroup); 
       if (innerResult != null) 
       { 
        result.AddRange(innerResult); 
       } 
      } 
     } 
     return result; 
    } 
    var rootView =(ViewGroup)CurrentActivity.Window.DecorView.RootView 
    var nativeListView = rootView.FindView<Android.Widget.ListView>(); 

Затем переопределить OnAppearing метод Page, в нем, придают ItemLongClick обработчик события. Также переопределите метод OnDisappearing, в нем отделите обработчик события ItemLongClick. Это важно. Просто добавьте ItemLongClick обработчик события в конструкторе, кажется, не работает.

Смежные вопросы