毕加索的麻烦将相同的图片加载到多个

时间:2015-10-08 21:42:04

标签: android android-imageview picasso

正如名称所说我在将相同的图像加载到多个ImageView中时遇到问题, 我遇到的问题是,对于每个图像视图,我想在每个图像视图上提供稍微不同的转换。但问题是只有第一个变换应用于两个图像。

这是实际毕加索部分的代码

 RequestCreator request;
    ImageView background = getTarget();
    if (background != null) {
        if (file != null && file.exists()) {
            request = Picasso.with(background.getContext()).load(file);
        } else {
            request = Picasso.with(background.getContext()).load(R.drawable.stock_living_room);
        }
        if (mBlurType == BLUR_NORMAL) {
            request.fit();
            request.memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE);
            request.centerCrop();
            request.transform(new BlurTransformation(background.getContext(), 20));
        } else {
            request.resize(128, 128);
            request.memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE);
            request.transform(new BlurTransformation(background.getContext(), 10));

        }
        if(applyGradient)
            request.memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE);
            request.transform(new LinearGradientTransformation(mGradient));
        request.into(background);
    }

我意识到我在那里有3次memoryPolicy我只是想看看它是否会起作用。我遇到的问题是最后一部分:if(applyGradient)

这里是我称之为具有上述代码

的类的代码
   mBackgroundImageViewTwo = new ImageView(getActivity());
    mBackgroundImageViewTwo.setVisibility(View.VISIBLE);
    mBackgroundImageViewTwo.getHeight();
    Shader Gradient = new LinearGradient(0, 0, 1, 1,
            new int[]{
                    ContextCompat.getColor(getActivity(), R.color.hot00Overlay),
                    ContextCompat.getColor(getActivity(), R.color.hot90Overlay)
            },
            new float[]{0f, 1f},
            Shader.TileMode.CLAMP);
    mImageHelper2 = new HomeGradientImageHelper(Gradient);
    mImageHelper2.setImageTarget(mBackgroundImageViewTwo, true);

    mBackgroundImageView = new ImageView(getActivity());
     mBackgroundImageView.getHeight();
    Shader mGradient = new LinearGradient(0, 0, 1, 1,
            new int[]{
                    ContextCompat.getColor(getActivity(), R.color.cool00Overlay),
                    ContextCompat.getColor(getActivity(), R.color.cool90Overlay)
            },
            new float[]{0f, 1f},
            Shader.TileMode.CLAMP);
    mImageHelper = new HomeGradientImageHelper(mGradient);
    mImageHelper.setImageTarget(mBackgroundImageView, true);
有趣的是,这两个图像视图看起来与完全相同的颜色看起来完全相同,即使如果我一次只做1个着色差异很大。

关于这一点的另一个有趣的部分是,如果通过go view.findViewById(引用)找到的东西的目标picasso调用FoundImageView.setVisibility(GONE)将不会有任何影响。

对此主题的任何想法将不胜感激。

1 个答案:

答案 0 :(得分:2)

确保在Transformation中添加适当的唯一键。

Picasso使用密钥在其Cache中缓存位图。如果您的所有转换可能都有一个空键,那么Picasso认为您拥有相同的图像并返回Cache的图像。缓存的密钥基于url,资源ID,转换键,位图解码选项等因素。