gpt4 book ai didi

c# - Xamarin.Android 如何在任何 View 上以编程方式设置涟漪效果?

转载 作者:太空狗 更新时间:2023-10-29 13:04:29 24 4
gpt4 key购买 nike

第一次在这里问问题所以让我们看看...

我在以编程方式将涟漪效果设置到 CardView 时遇到了问题。 (但我希望找到一种基本上适用于任何类型 View 的方法)事实是,我的卡片是这样以编程方式制作的:

...
//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));

...

现在如您所见,我根据可以找到的类似问题的答案对前景属性进行了尝试 here .

第二次尝试让我觉得它走在了正确的道路上,但它让我所有的卡片都变得隐形了:link . (我将 ripple.xml 添加到我项目的 drawable 文件夹中)

我也找到了 RippleDrawable 类,但我真的不明白如何正确使用它。它要求使用 mask 和可绘制的内容,但我不知道该放什么。到目前为止我的实现:

result.Background = new RippleDrawable(view.Resources.GetColor(Resource.Color.green),????,?????);

我想要涟漪效应的主要原因是因为我显示了卡片列表,它们都有一个打开弹出菜单的 onLongClick 事件。我想指出卡片是可点击的。

无论如何,我希望有人能帮我找到解决办法。

**更新:**使用 pre-android 5 的代码,卡片变得不可见。

 ...
result.Tag = itemId.ToString();
TypedValue outValue = new TypedValue();
this.Activity.Theme.ResolveAttribute(Android.Resource.Attribute.SelectableItemBackground, outValue, true);
result.SetBackgroundResource(outValue.ResourceId);

最佳答案

嗯,聪明的做法是这样的:

注意:以下代码不适用于运行在 API-21 或 Android Lollipop 以下的设备。

将以下 XML 添加到您的布局文件夹。

波纹.xml

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:color="@color/yourViewRippleColor"
tools:targetApi="lollipop">

<item>
<color android:color="@color/yourViewBackgroundColor" />
</item>

<item android:id="@android:id/mask">
<shape android:shape="rectangle">
<solid android:color="@color/yourViewRippleColor" />
</shape>
</item>
</ripple>

并在需要时像这样使用它:

_yourView.SetBackgroundResource(Resource.Layout.Ripple);

如果我没记错的话,你可以使用类似这样的纯编程方式来完成它:

注意:应该适用于以上任何设备和 honeycomb。

TypedValue outValue = new TypedValue();
this.Theme.ResolveAttribute(Android.Resource.Attribute.SelectableItemBackground, outValue, true);//In an Activity
this.Activity.Theme.ResolveAttribute(Android.Resource.Attribute.SelectableItemBackground, outValue, true);//In an Fragment
_YourView.SetBackgroundResource(outValue.ResourceId);

祝你好运!

如果您有查询还原。

关于c# - Xamarin.Android 如何在任何 View 上以编程方式设置涟漪效果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50174375/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com