5

我正在尝试将 a 设置RippleDrawable为列表视图行的背景。使用时view.setBackgroundResource(R.drawable.ripple)一切正常。尝试的时候

view.setBackground(view.getContext().getDrawable(R.drawable.ripple))

它可以工作,但是当快速触摸该项目时波纹不会显示(我也有该项目的激活/检查状态),它仅在我按住视图时出现。

View 类中的 setBackgroundResource 方法如下所示:

if (resid != 0 && resid == mBackgroundResource) {
    return;
}

Drawable d = null;
if (resid != 0) {
    d = mContext.getDrawable(resid);
}
setBackground(d);

mBackgroundResource = resid;

所以基本上我正在尝试手动执行的确切操作。

注意:我想使用 setBackground 方法,因为我想以编程方式创建 RippleDrawable。

有人知道为什么会这样吗?

4

2 回答 2

1

不要在 row 上设置波纹View,而是在ListViewusinglistSelector属性上设置它:

<ListView
    ...
    android:listSelector="@drawable/ripple" />

以编程方式,您可以使用mListView.setSelector(...).

于 2015-09-30T13:00:30.817 回答
1

View.invalidate();一起打电话 View.requestLayout();

使用时该CompoundButton功能setChecked(boolean)无效,View因此View要求重新检查自身,然后重新绘制或布局

于 2015-10-06T12:37:45.907 回答