当前位置: 首页 > 知识库问答 >
问题:

如何在任何视图上以编程方式设置涟漪效果?

简培
2023-03-14

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

我在以编程方式在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));

...

现在,正如您所看到的,我使用前景属性进行了尝试,基于在这里可以找到的类似问题的答案。

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

**更新:**卡片在Android 5之前的代码中变得不可见。

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

共有1个答案

酆华皓
2023-03-14

好吧,聪明的方法是这样的:

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

将以下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);
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);
 类似资料:
  • 我一直在为Lollipop(API 21)开发一个应用程序。 XML:

  • 问题内容: 我想将背景设置为。使用XML时没有问题(有效) …但是我必须在Java代码中执行此操作,因此我已经尝试过 …而且它不起作用,实际上我在第二行得到了一个。因此,在尝试了这种变体之后,我认为资源是一种颜色。 这个没有启动异常,但是…不起作用(按下时背景没有变化,但是按下时状态必须改变)…有什么建议吗? 问题答案: 您可以使用这种方式。

  • 我有两个有棱角的材质按钮。我的目标是以编程方式让按钮在按下某个键时产生涟漪。 看看stack blitz项目:https://stackblitz.com/edit/angular-material-button-vphppo 有没有一种方法可以让按钮在点击或按键的同时产生波纹? 我尝试了这些示例如何在Angular MatListItem上以编程方式触发涟漪效应? 但这会让按钮在点击时产生两次涟

  • 如何在java中向文本视图添加样式?我试图在我的价值观/风格下添加一个。xml,而不是单独添加每个属性。

  • 我正在试图找出为什么我的涟漪效应不符合我放置它的形状。下面是我正在使用的代码: 这是我设置到ImageViews背景的多用途按钮 这是我正在研究的可抽屉: 正如您在这个版本中所看到的,虽然它已经修复了现在在边界内的问题,但它不再保持涟漪效应;它缓慢地将背景色转换为第二种颜色,而不是产生实际的涟漪效果。 另外,为了明确起见,我还尝试将形状移动到它自己的可绘制文件(名为testing2),然后像下面这