【问题标题】:Perform ripple effect for long clicks对长按执行波纹效果
【发布时间】:2018-08-30 09:37:47
【问题描述】:

我目前正在实现一个具有 RecyclerView 的应用程序,其中有几个自定义视图。从这些视图中的每一个,用户都可以打开一个上下文菜单(需要长时间点击),但通常很难弄清楚,他们只会执行简单的点击,然后认为什么都没有更重要的是。但如果我设法提供一些UI 反馈,它可能会更清晰。这个想法是一个简单的涟漪动画,它突出显示背景,它不会通过简单的点击完成,但会一直持续到长点击动作。

由于我被困在这两天,我做了研究,实际上发现了一些 SO 问题问同样的事情,例如 this Cheok Yan Cheng 的一个写得很好,他甚至发布了一个视频显示期望的效果(我的问题几乎完全相同)但没有好的答案,因为第一个说我们应该使用?attr/selectableItemBackground 但给定的效果与我的目标不同,我尝试了第二个第一,当您在 onLongClick 中启动动画时,它不会对简单的点击做任何事情。

编辑:

请注意,无法通过 ?attr/selectableItemBackground 实现预期的行为,也无法通过创建波纹 xml 文件然后将其设置为背景,因为这些将再次提供正常的 onClick 动画和与所需动画不同的 longClick 动画,请查看this video 看看想要的效果是什么。

【问题讨论】:

  • 所以你想在 RecyclerView 项目长按时产生涟漪效果?
  • @NileshRathod 我看过但没有尝试,因为评论表明它不起作用(而且当我看到它时我有点累)。我现在就试一试
  • @UmangBurman 没错,但你应该检查我链接的堆栈溢出问题以获得实际的任何信息,有一个 youtube 链接
  • 好的,我已经完成了。我从我的项目中编写了一些代码,我会告诉你步骤。尝试实现它,因为它是一个小技巧,所以我会告诉你步骤..好吗?

标签: android android-animation rippledrawable


【解决方案1】:

尝试按照以下步骤操作,可能会有所帮助:

第一步:

在drawable中创建ripple.xml:(适用于Android >= v21)

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:colorControlHighlight">
    <item android:id="@android:id/mask">
        <color android:color="@android:color/transparent" /> 
    </item>
</ripple>

在这行&lt;color android:color="@android:color/transparent" /&gt; 将使您的按钮透明。

第二步:

在您使用 ConstraintLayout 的 item.xml 中:

<Button
     android:id="@+id/btnItemClickOnRecyclerView"
     android:layout_width="0dp"
     android:layout_height="0dp"
     android:layout_centerInParent="true"
     android:layout_marginTop="16dp"
     android:background="@drawable/ripple"
     android:paddingBottom="4dp"
     android:text="@string/view_details"
     android:textColor="@color/White"
     android:textSize="14sp"
     android:textStyle="bold"
     app:layout_constraintEnd_toEndOf="parent"
     app:layout_constraintStart_toStartOf="parent"
     app:layout_constraintTop_toTopOf="parent"
     app:layout_constraintBottom_toBottomOf="parent" /> 

就是这样。

由于您的按钮将完全覆盖您的项目,并且它会悬停在其他视图的顶部,因此它就像一个项目。

要在按钮上实现 longClick 监听器,请确保将其注册到 holder 中,然后在 holder.button.setOnLongClick 中注册......

试试看,如有疑问请评论。

【讨论】:

  • 嗯,动画不是预期的。但这是一个非常好的技巧,在其他情况下可能会有用,所以非常感谢你教我这个!
【解决方案2】:

创建一个名为ripple.xml 的xml 文件,然后将ripple.xml 设置为视图的前景。它会像魅力一样工作!!!

<?xml version="1.0" encoding="utf-8"?>
<!-- An white rectangle ripple. -->
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:color="#3fce29"
    tools:targetApi="lollipop">
    <item
        android:id="@android:id/mask"
        android:gravity="center">
        <shape android:shape="rectangle">
            <solid android:color="#3fce29"/>
        </shape>
    </item>
</ripple>

【讨论】:

  • 作为前台?你确定吗?另外这如何解决长按?
  • 没有预期的行为:感觉就像来自 R.attr 的 selectableItemBackgournd 属性。从我的问题中检查链接的 SO 问题,其中有一个指向显示所需效果的视频的链接
  • 要获得与视频相同的涟漪,您需要使用来自 github 的名为 android-ripple-background 的外部 livrary
【解决方案3】:

先试试这个制作涟漪效果xml

ripple.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/light_gray"
tools:targetApi="lollipop">
<item android:id="@android:id/mask">
    <shape android:shape="rectangle">
        <solid android:color="@color/light_gray"/>
    </shape>
</item>
</ripple>

比你的适配器贴花 xml 父布局像 LinearLayout 或者如果使用 RelativLayout 设置背景如下

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/ripple"
>......

【讨论】:

  • 与下面的答案几乎相同:不,它没有给我预期的行为检查问题链接中的视频以查看所需的效果
猜你喜欢
  • 2016-05-24
  • 2021-06-26
  • 1970-01-01
  • 1970-01-01
  • 2021-09-30
  • 2015-07-21
  • 2017-05-01
  • 2011-11-30
  • 1970-01-01
相关资源
最近更新 更多