使用波纹效果更改 FAB 颜色

     2023-04-14     72

关键词:

【中文标题】使用波纹效果更改 FAB 颜色【英文标题】:Change FAB color with ripple effect 【发布时间】:2017-06-11 20:01:57 【问题描述】:

在 Android 中,我想做这样的事情(但有 2 种交替的黑白颜色:

像这样用涟漪效果改变颜色

我尝试做的是:

1) 通过 XML 设置默认 backgroundTint 和波纹颜色

app:backgroundTint="@android:color/black"
app:rippleColor="@android:color/white"

2) onclick 方法中,将 backgroundTint 更改为白色,将波纹颜色更改为黑色

为初始颜色设置一个字符串,即high_color = "black"。那么,

fab.setOnClickListener(new View.OnClickListener() 
        @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
        @Override
        public void onClick(View v) 
            if(high_color.equals("black"))
                fab.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(getApplicationContext(), R.color.white)));
                fab.setImageTintList(ColorStateList.valueOf(ContextCompat.getColor(getApplicationContext(), R.color.black)));
                fab.setRippleColor(ContextCompat.getColor(getApplicationContext(), R.color.black));
                high_color = "white";
            else 
                fab.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(getApplicationContext(), R.color.black)));
                fab.setImageTintList(ColorStateList.valueOf(ContextCompat.getColor(getApplicationContext(), R.color.white)));
                fab.setRippleColor(ContextCompat.getColor(getApplicationContext(), R.color.whites));
                high_color = "black";
            
        
    );

现在我得到了这样的东西:

我得到的是这个

有没有办法让这个看起来像第一个?比如放慢波纹动画速度之类的?

【问题讨论】:

看看这个库:github.com/ozodrukh/RippleDrawable 在我看来,它不像是连锁反应。您是否为此尝试过 Circular Reveal?检查这个:guides.codepath.com/android/Circular-Reveal-Animation。还有这个:developer.android.com/training/material/animations.html 啊,如果你想要一个例子......检查我的回购,它完全符合你的要求,但是在 CustomView 上,在这个文件中:github.com/leandroBorgesFerreira/LoadingButtonAndroid/blob/… 尝试将波纹颜色更改为透明... Idk,它可能会工作 【参考方案1】:

好吧,从来没有在 FAB 上尝试过,但为了简单起见,我在 ImageButton 上实现了相同的功能,如下所示,它可以工作。希望能帮助到你。这是针对大于 21 (Lollipop) 的 API。默认情况下,我的 ImageButton 的静止高度为 6dp,触摸时它会升高到 18dp (6dp + 12dp),如果需要,您可以在 lift_on_touch.xml 中更改它.另外,我使用的是 StateListAnimator,它会根据 ImageButton 的状态变化而变化。

<ImageButton
    android:id="@+id/share_fab"
    android:layout_
    android:layout_
    android:layout_margin="16dp"
    android:background="@drawable/ripples_on_touch"
    android:elevation="6dp"
    android:padding="16dp"
    android:src="@drawable/ic_share_white_24dp"
    android:stateListAnimator="@animator/lift_on_touch"
    tools:targetApi="lollipop" />

v21/ripples_on_touch.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="#F83E0ACC"
tools:targetApi="lollipop">
<item>
    <shape android:shape="oval">
        <solid android:color="#FFFF6F00" />
    </shape>
</item>
</ripple>

v21/lift_on_touch.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
    <set>
        <objectAnimator
            android:duration="@android:integer/config_longAnimTime"
            android:propertyName="scaleX"
            android:valueTo="1.250"
            android:valueType="floatType" />
        <objectAnimator
            android:duration="@android:integer/config_longAnimTime"
            android:propertyName="scaleY"
            android:valueTo="1.250"
            android:valueType="floatType" />
        <objectAnimator
            android:duration="@android:integer/config_longAnimTime"
            android:propertyName="translationZ"
            android:valueTo="12dp"
            android:valueType="floatType" />
    </set>
</item>

<item>
    <set>
        <objectAnimator
            android:duration="@android:integer/config_longAnimTime"
            android:propertyName="scaleX"
            android:valueTo="1.0"
            android:valueType="floatType" />
        <objectAnimator
            android:duration="@android:integer/config_longAnimTime"
            android:propertyName="scaleY"
            android:valueTo="1.0"
            android:valueType="floatType" />
        <objectAnimator
            android:duration="@android:integer/config_longAnimTime"
            android:propertyName="translationZ"
            android:valueTo="0dp"
            android:valueType="floatType" />
    </set>
</item>
</selector>

【讨论】:

【参考方案2】:

我认为你应该使用选择器。选择器允许在后台轻松进行更改。

以类似的方式使用选择器:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@android:color/white" state_enabled="true "/>
    <item android:color="@android:color/black" state_enabled="false "/>
</selector>

用它作为FAB的背景,下面有sn-p:

app:background ="@drawable/selector"

这将在点击时将白色作为背景。否则它将是黑色的。 还有更多属性命名空间可以进一步调整选择器。因此,请阅读 Android 开发者网站上的选择器。 如果这真的对您有帮助,请回复我。

【讨论】:

您甚至可以在 Fab app:rippleColor="@android: color/#999999" 中设置波纹颜色@

使用按钮背景颜色为我的按钮添加波纹效果?

】使用按钮背景颜色为我的按钮添加波纹效果?【英文标题】:Addrippleeffecttomybuttonwithbuttonbackgroundcolor?【发布时间】:2017-02-2120:18:34【问题描述】:我创建了一个按钮,我想为该按钮添加波纹效果!我创建了一个按钮bgXML文件:(... 查看详情

React MUI - 无法在悬停时更改 FAB 颜色

...318:56:06【问题描述】:我无法在悬停时更改此FAB的颜色。使用这些设置,颜色和悬停的颜色显示为禁用(全灰色)。这是代码:conststyle=margin:0,top:"auto",right:20,bottom:20,left:"auto",position:"fi 查看详情

Android 材质 CardView 波纹效果改变内容颜色

...lor【发布时间】:2022-01-1914:26:07【问题描述】:我最近从使用自定义卡片组件转向使用MaterialDesign3卡片。令我惊讶的是,当按下卡片时,波纹颜色会改变内容颜色。我在material-design-components存储库的目录项目上尝 查看详情

如何在保留其他样式属性的同时更改 Android Button 波纹颜色?

】如何在保留其他样式属性的同时更改AndroidButton波纹颜色?【英文标题】:HowtochangeAndroidButtonripplecolorswhilepreservingotherstyleproperties?【发布时间】:2017-01-1715:59:04【问题描述】:我想从默认材料设计风格继承所有Button风格,并保... 查看详情

帮我更改一下button点击效果水纹效果。

...减慢动画执行速度),观察效果:经观察,发现这个“水波纹”特效是全屏的,你看到的点击一个按钮后两个按钮上都有水波纹,其实是因为生成的那个水波纹动画层全屏覆盖住了整个页面,由于水波纹层是白色半透明的,所以... 查看详情

Android 波纹背景颜色

...布时间】:2015-08-1322:02:08【问题描述】:我在导航抽屉上使用了涟漪效果。我已将其设置为这样并将其应用于我的ListView:<selectorxmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:state_ac 查看详情

使用渐变效果更改背景颜色

】使用渐变效果更改背景颜色【英文标题】:ChangeBackgroundColorWithaFadingEffect【发布时间】:2017-10-0814:20:36【问题描述】:我想将我的GameScene的背景颜色从黑色更改为带有渐变效果的白色。我该怎么做?我尝试过使用动画。【问题... 查看详情

如何像屏幕保护程序一样更改 CAGradientLayer 的颜色?

...上到下平滑地改变,就像屏幕保护程序一样。我已经尝试使用NStimer那位Done 查看详情

具有背景颜色的按钮的材质效果

...dcolor【发布时间】:2014-12-2810:58:03【问题描述】:我正在使用Androidv21支持库。我创建了一个带有自定义背景颜色的按钮。当我使用背景颜色时,波纹、显示等Material设计效果消失了(点击时的高度除外)。<Buttonstyle="?android:attr... 查看详情

使用 ?attr/selectableItemBackground 作为背景时如何修改波纹颜色?

】使用?attr/selectableItemBackground作为背景时如何修改波纹颜色?【英文标题】:HowcanImodifyripplecolorwhenusing?attr/selectableItemBackgroundasbackground?【发布时间】:2016-01-0817:56:03【问题描述】:我看到了一些SO问题,他们提供了一些可能的方... 查看详情

在 Flutter 中使用具有不同选项卡的不同 FAB,并在它们之间滑动时更改按钮?

】在Flutter中使用具有不同选项卡的不同FAB,并在它们之间滑动时更改按钮?【英文标题】:UsedifferentFABswithdifferenttabsinFlutter,andchangebuttonswhileswipingbetweenthem?【发布时间】:2020-08-1713:19:58【问题描述】:我正在尝试使用FAB设置选项... 查看详情

带有伪元素的 CSS 波纹效果导致回流

...【发布时间】:2021-01-0900:05:36【问题描述】:我正在尝试使用styled-components创建材质波纹效果(无法导入材质web-componentsmixins)。我想坚持使用after元素作为前景效果,以保持可访问性树完好无损。但是,最值得注意的是,在移动... 查看详情

如何更改浮动操作按钮的颜色?

】如何更改浮动操作按钮的颜色?【英文标题】:Howtochangefloatingactionbuttoncolor?【发布时间】:2018-12-1115:19:06【问题描述】:fab.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(PrivateDealActivity.this,R.color.colorWhite)));这不起作用。... 查看详情

使用颜色渐变更改背景颜色

】使用颜色渐变更改背景颜色【英文标题】:Changebackgroundcolorwithcolorgradients【发布时间】:2012-07-1023:35:19【问题描述】:我想从我的组合框中更改背景颜色。但我想保留颜色渐变。我已经尝试使用此代码,但仍然没有得到效果。... 查看详情

使用选择时,TextView 的波纹效果卡在长按上

】使用选择时,TextView的波纹效果卡在长按上【英文标题】:RippleeffectofTextViewgetsstuckonlongclick,whenselectionisused【发布时间】:2021-09-3018:08:16【问题描述】:我最近重构了我的应用程序以使用喷气背包导航。在我的MainActivity上,我... 查看详情

设置 FAB 图标颜色

】设置FAB图标颜色【英文标题】:SetFABiconcolor【发布时间】:2015-09-1519:21:25【问题描述】:当前FAB我想知道如何将“com.android.support:design:22.2.0”库提供的FAB(浮动操作按钮)小部件的图标颜色从绿色更改为白色。style.xml<resource... 查看详情

如何更改主题更改时浮动操作按钮的颜色?

】如何更改主题更改时浮动操作按钮的颜色?【英文标题】:Howtochangecoloroffloatingactionbuttononthemechange?【发布时间】:2016-02-1605:41:04【问题描述】:我想在我的应用程序中应用不同的主题。我想更改导航栏和浮动操作按钮的颜色... 查看详情

TextView 长按的波纹效果

...题是跟进***.com/questions/35373987/…【参考方案1】:您可以使用AndroidRippleBa 查看详情