android - 对长按执行涟漪效应

标签 android android-animation rippledrawable

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

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

编辑:

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

最佳答案

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

第一步:

在 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>

在这一行<color android:color="@android:color/transparent" />将使您的按钮透明。

第二步:

在我使用 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" /> 

就是这样。

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

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

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

关于android - 对长按执行涟漪效应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52093792/

相关文章:

android - 在 ListView 的项目点击没有响应

android - Webview 导致 ANR

java - 如何以编程方式更改选择器内形状的颜色?

android - 布局中其他 View 隐藏的 Material 波纹效果

android - 调试 PhoneGap 应用程序

KTX 安卓动画

Android - ListView 中项目的进入动画

android - 如何在 Activity 转换的共享元素上实现放大动画

Android Recycler 查看波纹效果不起作用

java - 从unity发送数据到java android