【问题标题】:onClick removes ripple effect from ImageViewonClick 从 ImageView 中移除波纹效果
【发布时间】:2015-07-02 02:24:20
【问题描述】:

我有一个简单的 ImageView 包裹在 FrameLayout 中,以赋予它涟漪效果:

<FrameLayout
    android:id="@+id/container"
    android:layout_width="250dp"
    android:layout_height="250dp"
    android:clickable="true"
    android:foreground="?android:attr/selectableItemBackground">

    <ImageView
        android:id="@+id/image_view"
        android:layout_width="250dp"
        android:layout_height="250dp"
        android:src="@drawable/image"/>

</FrameLayout>

这可以很好地添加涟漪效果。但是,当我向 ImageView 添加 onClick 侦听器时,波纹效果不再起作用,考虑到波纹效果适用于可以选择/单击的元素,这很奇怪!

ImageView imageView = (ImageView)findViewById(R.id.image_view);
imageView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // Logic.
    }
});

有人知道如何保持 onClick 和涟漪吗?

【问题讨论】:

  • 尝试像这样在父视图(FrameLayout)上设置onClickListener:((ImageView)imageView.getParent()).setOnClickListener....
  • @Tomislav 导致 java.lang.ClassCastException
  • 是的,你是对的。 ImageView.getParent() 正在返回一个 ViewParent。试试这个: ((View)imageView.getParent()).setOnClickListener ... 确保父视图(FrameLayout)实现 ViewParent 接口,否则演员会下降(我现在无法检查)
  • @Tomislav 这似乎有效!将其添加为答案,以便我可以接受它:) 我可以直接调用 FrameLayout 并向该 (FrameLayout)findViewById(R.id.container).setOnClickListener 添加一个 onClick 侦听器...
  • 太棒了。我将其添加为答案。

标签: android imageview


【解决方案1】:

像这样在父视图(FrameLayout)上设置 onClickListener:((View)imageView.getParent()).setOnClickListener...

ImageView.getParent() 正在返回一个 ViewParent。确保父视图(FrameLayout)实现 ViewParent 接口,否则转换会失败。

【讨论】:

  • 谢谢!我也可以直接引用 FrameLayout 并为其添加一个 onClick 侦听器。
  • 是的,这样做更快更干净
猜你喜欢
  • 2021-03-03
  • 2017-05-12
  • 1970-01-01
  • 2016-06-02
  • 1970-01-01
  • 2021-01-16
  • 1970-01-01
  • 1970-01-01
  • 2015-04-22
相关资源
最近更新 更多