1

我需要比较两个PorterDuffColorFilter对象以检查 a在Espresso 测试ProgressBar中是否显示正确的颜色

我曾尝试直接比较这两个对象,但以下方法总是返回false

// Creating a PorterDuffColorFilter Object
weakOrNonePasswordColorFilter =
            new PorterDuffColorFilter(ContextCompat.getColor(mActivityRule.getActivity(), R.color.red), PorterDuff.Mode.SRC_IN);
...

// Retrieving the ProgressBar ColorFilter and compare
public boolean matchesSafely(ProgressBar progressBar, PorterDuffColorFilter colorFilter) {
  LayerDrawable drawable = (LayerDrawable) progressBar.getProgressDrawable();
  Drawable progressDrawable = drawable.getDrawable(1);
  progressDrawable.setColorFilter(colorFilter);
  return ((PorterDuffColorFilter)progressDrawable.getColorFilter()).equals(colorFilter);
}

往里面看PorterDuffColorFilter有一个

public int getColor() {
    return mColor;
}

应该解决我的问题的方法。但是,我无法访问此方法。Android Studio 仅显示“对象”方法,如果我尝试使用 . getColor()将显示一条错误消息,指出找不到该方法。

出现这个问题是因为这个类在android.graphics包中,使其无法访问吗?

如果是这样,我如何检索ProgressBar条形的颜色并将其与颜色进行比较?

4

1 回答 1

1

PorterDuffColorFilter 覆盖equals,因此您应该能够使用:filterA.equals(filterB)

// From PorterDuffColorFilter.java

@Override
public boolean equals(Object object) {
    if (this == object) {
        return true;
    }
    if (object == null || getClass() != object.getClass()) {
        return false;
    }
    final PorterDuffColorFilter other = (PorterDuffColorFilter) object;
    return (mColor == other.mColor && mMode.nativeInt == other.mMode.nativeInt);
}
于 2017-11-17T12:23:11.120 回答