Впервые задаю вопрос здесь, поэтому давайте посмотрим ...
У меня проблемы с программной настройкой эффекта ряби на CardView. (Но я надеюсь найти способ, который работает в основном при любом виде). Дело в том, что мои карты сделаны программно следующим образом:
...
//make cardview
CardView result = new CardView(Activity);
//set layout
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(0, 100, 1f);
layoutParams.SetMargins(10, 10, 10, 10);
result.LayoutParameters = layoutParams;
result.Tag = itemId.ToString();
//FAILED ATTEMPT 1:
//result.Foreground = "?android:attr/selectableItemBackground";
//FAILED ATTEMPT 2 :
//result.SetBackgroundDrawable(view.Resources.GetDrawable(Resource.Drawable.ripple));
...
Теперь, как вы можете видеть, я попробовал это с помощью свойства переднего плана, основываясь на ответе на похожий вопрос, который можно найти здесь .
вторая попытка заставляет меня чувствовать, что она на правильном пути, но делает все мои карты невидимыми - иш: ссылка . (Я добавил ripple.xml в папку drawable моего проекта)
Я также нашел класс RippleDrawable, но я действительно не понимаю, как правильно его использовать. Он просит использовать маску и контент для рисования, но я понятия не имею, что там поставить. Моя реализация этого до сих пор:
result.Background = new RippleDrawable(view.Resources.GetColor(Resource.Color.green),????,?????);
Основная причина, по которой я хочу получить волновой эффект, заключается в том, что я показываю список карт, и у всех них есть событие onLongClick, которое открывает всплывающее меню. Я хочу указать, что карты кликабельны.
В любом случае, я надеюсь, что кто-нибудь поможет мне найти решение.
** ОБНОВЛЕНИЕ: ** карты становятся невидимыми с кодом пре-андроида 5.
...
result.Tag = itemId.ToString();
TypedValue outValue = new TypedValue();
this.Activity.Theme.ResolveAttribute(Android.Resource.Attribute.SelectableItemBackground, outValue, true);
result.SetBackgroundResource(outValue.ResourceId);