正如名称所说我在将相同的图像加载到多个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)将不会有任何影响。
对此主题的任何想法将不胜感激。
答案 0 :(得分:2)
确保在Transformation中添加适当的唯一键。
Picasso使用密钥在其Cache
中缓存位图。如果您的所有转换可能都有一个空键,那么Picasso认为您拥有相同的图像并返回Cache
的图像。缓存的密钥基于url,资源ID,转换键,位图解码选项等因素。