package pasta.music.views;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.media.ThumbnailUtils;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.widget.AppCompatImageView;
import android.util.AttributeSet;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import com.afollestad.async.Action;
import pasta.music.utils.ImageUtils;
public class CustomImageView extends AppCompatImageView {
public CustomImageView(Context context) {
super(context);
}
public CustomImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void transition(final Bitmap second) {
if (second == null || second.getWidth() < 1 || second.getHeight() < 1) return;
final int size = Math.min(getMeasuredWidth(), getMeasuredHeight());
new Action<Bitmap>() {
@NonNull
@Override
public String id() {
return "transitionDrawable";
}
@Nullable
@Override
protected Bitmap run() throws InterruptedException {
try {
return ThumbnailUtils.extractThumbnail(second, size, size);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
@Override
protected void done(@Nullable final Bitmap result) {
if (result == null) {
setImageBitmap(second);
return;
}
Animation exitAnim = AnimationUtils.loadAnimation(getContext(), android.R.anim.fade_out);
exitAnim.setDuration(150);
exitAnim.setAnimationListener(new Animation.AnimationListener() {
@Override public void onAnimationStart(Animation animation) {
}
@Override public void onAnimationRepeat(Animation animation) {
}
@Override public void onAnimationEnd(Animation animation) {
setImageBitmap(result);
Animation enterAnim = AnimationUtils.loadAnimation(getContext(), android.R.anim.fade_in);
enterAnim.setDuration(150);
startAnimation(enterAnim);
}
});
startAnimation(exitAnim);
}
}.execute();
}
public void transition(Drawable second) {
transition(ImageUtils.drawableToBitmap(second));
}
}