对ImageView的涟漪效应不会触发

时间:2016-07-30 07:19:51

标签: java android android-layout android-recyclerview material-design

我在每个项目中都有RecyclerView ImageView个。

我为onClickListener中的ImageView设置onBindViewHolder,如下所示:

holder.starIV.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO: logic
        }
    });

在我向onClick添加以下逻辑之前,涟漪效应正常。此逻辑更改Drawable的{​​{1}}。

ImageView

现在,我得到没有涟漪效应。这是holder.starIV.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (v.getId() == holder.starIV.getId()) { ListItem clickedItem = mDataset.get(position); ListItem updatedItem = new ListItem(clickedItem); if (clickedItem.getStarState() == STAR_ON) { updatedItem.setStarState(STAR_OFF); updatedItem.setStarDrawable( ContextCompat.getDrawable( v.getContext(),R.drawable.ic_star_border_24px)); } else if (clickedItem.getStarState() == STAR_OFF) { updatedItem.setStarState(STAR_ON); updatedItem.setStarDrawable( ContextCompat.getDrawable( v.getContext(),R.drawable.ic_star_24px)); } mDataset.set(position,updatedItem); notifyDataSetChanged(); } } }); 的XML:

ImageView

当我在<ImageView android:id="@+id/list_item_star" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:paddingLeft="4dp" android:paddingRight="16dp" android:src="@drawable/ic_star_border_24px" android:clickable="true" android:background="?attr/selectableItemBackgroundBorderless" android:drawSelectorOnTop="true" /> 注释出逻辑部分时,涟漪效应会再次正常工作。

我是否正确实施了上述内容?

您建议如何改变涟漪效果?

编辑:似乎更改onClick会干扰波纹动画。所以我将所有逻辑移动到Drawable并稍微延迟以允许动画完成。这似乎工作,但我觉得这个解决方案并不优雅。这是AsyncTask

AsyncTask

2 个答案:

答案 0 :(得分:1)

你可以设置一个波纹可绘制作为你的imageview的前景。

答案 1 :(得分:0)

将以下代码添加到您的父版面

android:clickable="true"
android:focusable="true"
android:background="?attr/selectableItemBackgroundBorderless"