Android Espresso匹配具有不同色调的BitmapDrawables

问题描述 投票:6回答:2

有没有办法比较由Bitmaps包裹的两个BitmapDrawable

如果大小不匹配,则比较不会失败,但它应匹配像素和Bitmap的颜色

我不确定Android的本机部分如何绘制Bitmap因为sameAs即使色泽不同,也会返回true。

如果大小不同,我可以彼此创建缩放的Bitmap并将它们进行比较。

在我的源代码中,我将DrawableCompat.setTintImageViews Drawable结合使用,并且在测试代码中,我从资源中加载Drawable,并以相同的方式对其进行着色。

有什么想法吗?我想进行测试,以根据是否按下来验证Drawable的来源ImageView和颜色。

NOTE 1:我的可绘制对象是白色的,我使用色调设置颜色。 Bitmaps的循环像素不起作用,因为此时像素为白色,所以很可能Android本机面在绘制时会使用淡色。

注2:

使用compile 'com.android.support:palette-v7:21.0.0'Palette.from(bitmap).generate();都无济于事,因为返回的调色板有0个色板,因此在那里无法获得任何颜色信息。

这是我当前的匹配者:

public static Matcher<View> withDrawable(final Drawable d) {
    return new BoundedMatcher<View, ImageView>(ImageView.class) {

        @Override
        public boolean matchesSafely(ImageView iv) {
            if (d == null) {
                return iv.getDrawable() == null;
            } else if (iv.getDrawable() == null) {
                return false;
            }

            if (d instanceof BitmapDrawable && iv.getDrawable() instanceof BitmapDrawable) {
                BitmapDrawable d1 = (BitmapDrawable) d;
                BitmapDrawable d2 = (BitmapDrawable) iv.getDrawable();

                Bitmap b1 = d1.getBitmap();
                Bitmap b2 = d2.getBitmap();

                return b1.sameAs(b2);
            }

            return iv.getDrawable().getConstantState().equals(d.getConstantState());
        }

        @Override
        public void describeTo(Description description) {
            description.appendText("with drawable: ");
        }
    };
}

谢谢。

是否有某种方法可以比较由BitmapDrawable包装的两个位图。如果大小不匹配,则比较应该不会失败,但是应该匹配像素和位图的颜色I ...

android android-drawable android-bitmap android-espresso
2个回答
0
投票

为此,我使用Frankie Sardo编写的匹配器-https://gist.github.com/frankiesardo/7490059。有几个匹配器必须解决您的问题。全部归功于他。


0
投票

我遇到了相反的问题:当绘画的大小和/或色调可以改变时,匹配它。

© www.soinside.com 2019 - 2024. All rights reserved.