setBackgroundResource与setBackground的行为不同,RippleDrawable

时间:2015-09-27 21:58:51

标签: android rippledrawable

我正在尝试将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。

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

2 个答案:

答案 0 :(得分:1)

不是在行View上设置涟漪,而是使用ListView属性在listSelector上设置:

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

以编程方式,您可以使用mListView.setSelector(...)设置它。

答案 1 :(得分:1)

拨打 View.invalidate(); 以及 View.requestLayout();

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