我還不知道這是一個錯誤報告還是功能請求,請耐心等待。永遠從佔位符淡入畢加索
我使用Picasso,我注意到示例應用程序始終從previous image
(請參閱here瞭解我的意思)演示中淡入。但是,我希望它總是從給定的placeholder
中淡入。
我對這種行爲的猜測是網格的視圖被回收,畢加索在淡入到實際圖像之前沒有設置佔位符。
這是故意的嗎?我將如何總能從佔位符淡入?
我還不知道這是一個錯誤報告還是功能請求,請耐心等待。永遠從佔位符淡入畢加索
我使用Picasso,我注意到示例應用程序始終從previous image
(請參閱here瞭解我的意思)演示中淡入。但是,我希望它總是從給定的placeholder
中淡入。
我對這種行爲的猜測是網格的視圖被回收,畢加索在淡入到實際圖像之前沒有設置佔位符。
這是故意的嗎?我將如何總能從佔位符淡入?
Picasso.with(this).load(image URL)
.placeholder(place_holder_bitmap).error(place_holder_bitmap)
.resize(call resize method here to pass new pixels constraint, getPixels(30))
.transform(transformation).into(imageView);
這裏轉換是應用於圓形圖像視圖在我的情況下,忽略這部分代碼,如果不重要的項目。
畢加索支持一些特定情況下的淡出動畫。但是,它並不適合我,因爲我使用帶有picasso的自定義目標,它允許我設置可繪製的背景。
我已經複製了PicassocDrawable,它有一個很好的淡入淡出動畫並添加了公共構造函數。
/* Copyright (C) 2013 Square, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.example.app;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.SystemClock;
import android.widget.ImageView;
/**
* Changelog :
* - Modified from Picasso 2.5.0 to allow public instantiation
*/
public class CustomPicassoDrawable extends BitmapDrawable{
// Only accessed from main thread.
private static final Paint DEBUG_PAINT = new Paint();
private static final float FADE_DURATION = 200f; //ms
/**
* Create or update the drawable on the target {@link android.widget.ImageView} to display the supplied bitmap
* image.
*/
static void setBitmap(ImageView target, Context context, Bitmap bitmap) {
Drawable placeholder = target.getDrawable();
if (placeholder instanceof AnimationDrawable) {
((AnimationDrawable) placeholder).stop();
}
CustomPicassoDrawable drawable =
new CustomPicassoDrawable(context, bitmap, placeholder);
target.setImageDrawable(drawable);
}
/**
* Create or update the drawable on the target {@link ImageView} to display the supplied
* placeholder image.
*/
static void setPlaceholder(ImageView target, Drawable placeholderDrawable) {
target.setImageDrawable(placeholderDrawable);
if (target.getDrawable() instanceof AnimationDrawable) {
((AnimationDrawable) target.getDrawable()).start();
}
}
private final float density;
Drawable placeholder;
long startTimeMillis;
boolean animating;
int alpha = 0xFF;
public CustomPicassoDrawable(Context context, Bitmap bitmap, Drawable placeholder) {
super(context.getResources(), bitmap);
this.density = context.getResources().getDisplayMetrics().density;
this.placeholder = placeholder;
animating = true;
startTimeMillis = SystemClock.uptimeMillis();
}
@Override public void draw(Canvas canvas) {
if (!animating) {
super.draw(canvas);
} else {
float normalized = (SystemClock.uptimeMillis() - startTimeMillis)/FADE_DURATION;
if (normalized >= 1f) {
animating = false;
placeholder = null;
super.draw(canvas);
} else {
if (placeholder != null) {
placeholder.draw(canvas);
}
int partialAlpha = (int) (alpha * normalized);
super.setAlpha(partialAlpha);
super.draw(canvas);
super.setAlpha(alpha);
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.GINGERBREAD_MR1) {
invalidateSelf();
}
}
}
}
@Override public void setAlpha(int alpha) {
this.alpha = alpha;
if (placeholder != null) {
placeholder.setAlpha(alpha);
}
super.setAlpha(alpha);
}
@Override public void setColorFilter(ColorFilter cf) {
if (placeholder != null) {
placeholder.setColorFilter(cf);
}
super.setColorFilter(cf);
}
@Override protected void onBoundsChange(Rect bounds) {
if (placeholder != null) {
placeholder.setBounds(bounds);
}
super.onBoundsChange(bounds);
}
}
你可以用它與
Picasso
.with(this)
.load("http://yourimage")
.into(new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
CustomPicassoDrawable drawable = new CustomPicassoDrawable(
FullscreenActivity.this, bitmap, myBackground);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
myView.setBackground(drawable);
} else {
myView.setBackgroundDrawable(drawable);
}
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {}
});
ViewUtils.setBackground(mNativeVideoLayout,drawable); 什麼是ViewUtils和mNativeVideoLayout – Android
I + 1-ED抗衡的原因不明-1。 –
什麼版本的畢加索? –
我正在使用2.2.1版本。實際上,爲了增加對圓形繪圖的支持(使用Romain Guy的技術),我分出了原始項目,但這個「問題」是在標準的PicassoDrawable實現中發生的。 – Sebastiano