我有一个 RecyclerView
,每个项目都有 ImageView
。
我为 onBindViewHolder
中的 ImageView
设置了 onClickListener
如下:
holder.starIV.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO: logic
}
});
在我将以下逻辑添加到 onClick
之前,链式 react 效果很好。此逻辑更改 ImageView
的 Drawable
。
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();
}
}
});
现在,我完全没有链式 react 。这是 ImageView
的 XML:
<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
:
class DoLogix extends AsyncTask<Integer, Integer, Void> {
@Override
protected Void doInBackground(Integer... params) {
try{Thread.sleep(125);}catch (Exception e) {}
publishProgress(params[0]);
return null;
}
protected void onProgressUpdate(Integer... val) {
ListItem clickedItem = mDataset.get(val[0]);
ListItem updatedItem = new ListItem(clickedItem);
if (clickedItem.getStarState() == STAR_ON) {
updatedItem.setStarState(STAR_OFF);
updatedItem.setStarDrawable(starBorder);
}
else if (clickedItem.getStarState() == STAR_OFF) {
updatedItem.setStarState(STAR_ON);
updatedItem.setStarDrawable(star);
}
mDataset.set(val[0],updatedItem);
notifyDataSetChanged();
}
}
最佳答案
您可以将波纹可绘制对象设置为 ImageView 的前景。
关于java - ImageView 上的涟漪效应未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38671427/