【问题标题】:Android why am I having double ripple effect on background selector?Android 为什么我在背景选择器上有双重涟漪效应?
【发布时间】:2015-06-24 07:12:10
【问题描述】:

我对新闻项目有双重涟漪效应(项目中心的涟漪效应和触摸点的第二次),这是我的问题的屏幕截图:

但这只会发生在第一个项目上,在其他项目中,连锁反应效果很好。我正在关注这个udacity project,我确实意识到他们有同样的问题。

这是我正在使用的资源:

drawable-v21/touch_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">

  <item android:state_pressed="true">
      <ripple android:color="@color/grey" />
  </item>

  <item android:drawable="@color/light_blue" android:state_activated="true" />

  <item android:drawable="@android:color/transparent" />
</selector>

row_item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:background="@drawable/touch_selector"
  android:minHeight="?android:attr/listPreferredItemHeight"
  android:orientation="horizontal">
  ...
</LinearLayout>

fragment_main.xml

...
<ListView
    android:id="@android:id/list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:divider="@null"
    tools:listitem="@layout/row_item" />
...

如何解决按下项目的双重涟漪效应? (同样,这只是发生在第一个项目中,其他项目运行良好)。

这里是源代码:https://github.com/epool/SpotifyStreamer/tree/stage-2

【问题讨论】:

  • 该错误必须在代码中的其他位置。此外,还需要更多细节。例如,它是列表中的第一个项目,还是第一个被按下的项目。您是否注册了两个重叠的 Fragment 或 Recyclerview?
  • @easycheese 是的,它是列表中的第一个项目,而不是第一个被按下的项目。该活动有两个片段,左侧片段是列表所在的位置,右侧片段是另一个具有相同问题的列表。我现在不在笔记本电脑上,但如果有必要,我可以稍后添加更多代码,代码与 udacity github 链接非常相​​似。

标签: android android-listview material-design android-selector rippledrawable


【解决方案1】:

我也遇到了同样的问题,在寻找了几个小时之后,我意识到涟漪效应被触发了两次,因为我将v.setEnabled(false) 然后v.setEnabled(true) 放在onClickListener 中以禁用视图,而 onClick 是正在进行中。

删除它们为我解决了问题。

【讨论】:

    【解决方案2】:

    @epool,

    我下载了您的项目并运行了它。 问题不仅出现在列表的第一项上,还出现在其他项目上。我确实注意到它是不一致的,但它并不是每次都发生。

    看来您可能已经在不同的地方设置了涟漪效果,或者至少启用了它。

    如果您只是删除下面的代码行,它应该可以正常工作! =]

    <item android:state_pressed="true">
       <ripple android:color="@color/grey" />
    </item>
    

    顺便说一句,我多次单击列表中的不同项目以查看它们的行为,然后,我收到以下错误:

    java.lang.ArrayIndexOutOfBoundsException: src.length=2048 srcPos=2048 dst.length=2048 dstPos=0 length=2047

    这在您的 Binder.java 文件中,位于 446 行。所以你可能想解决这个问题。

    如果您有任何其他问题,请告诉我。

    【讨论】:

    • 我已经删除了涟漪项目,它可以工作,但是当前选择的项目(蓝色)在按下时不再具有涟漪效果。
    • 很奇怪。当我运行您的项目时,我没有看到任何蓝色...我将“android:state_activated”更改为“android:state_selected”进行测试,在搜索艺术家后我确实看到了一个蓝色项目。即使在那个项目上,它也对我有用。
    • 我不确定您使用的是什么设备,但理论上该行在 sw-600dp 的平板电脑上应该是蓝色的。
    • 让我在不同的设备上进行测试。稍后我会回复您。
    【解决方案3】:

    如果不是在列表项上设置background,而是在列表视图本身上设置为listSelector,或者在项目的背景选择器中不包括state_pressed,我认为可以避免双重涟漪.

    【讨论】:

      猜你喜欢
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-03
      • 2019-12-07
      • 1970-01-01
      相关资源
      最近更新 更多