我在每个项目中都有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
答案 0 :(得分:1)
你可以设置一个波纹可绘制作为你的imageview的前景。
答案 1 :(得分:0)
将以下代码添加到您的父版面
android:clickable="true"
android:focusable="true"
android:background="?attr/selectableItemBackgroundBorderless"