package com.base.util.helper;
import android.content.res.Resources;
import android.support.design.widget.CollapsingToolbarLayout;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import com.App;
import com.base.util.BaseUtils;
import com.base.util.BindingUtils;
import com.base.util.SpUtil;
import com.ui.main.R;
public class ImageAnimator {
private String[] mImages = {
"http://img-cdn.luoo.net/pics/essays/201701/Ftwd9K_sxJFVZyy2bCtEtWlyF5Le.jpg",
"http://img-cdn.luoo.net/pics/vol/585800ce78e88.jpg?imageView2/1/w/640/h/452",
"http://img-cdn.luoo.net/pics/vol/58138dab67978.jpg?imageView2/1/w/640/h/452",
"http://img-cdn.luoo.net/pics/vol/5838629f22305.jpg?imageView2/1/w/640/h/452",
"http://img-cdn.luoo.net/pics/vol/583b045d826cb.jpg?imageView2/1/w/640/h/452",
"http://img-cdn.luoo.net/pics/vol/5736055312e75.jpg?imageView2/1/w/640/h/452",
"http://img-cdn.luoo.net/pics/vol/5824406291aef.jpg?imageView2/1/w/640/h/452",
"http://img-cdn.luoo.net/pics/vol/56cf4715dd2fa.jpg?imageView2/1/w/640/h/452",
"http://img-cdn.luoo.net/pics/vol/57e2c6fd714e2.jpg?imageView2/1/w/640/h/452",
"http://img-cdn.luoo.net/pics/vol/579255f04b1da.jpg?imageView2/1/w/640/h/452",
"http://img-cdn.luoo.net/pics/vol/581b681b678f1.jpg?imageView2/1/w/640/h/452"};
private int[] mColors;
private static final float FACTOR = 0.1f;
private final ImageView mTargetImage; // 原始图片
private final ImageView mOutgoingImage; // 渐变图片
private int mActualStart; // 实际起始位置
private int mStart;
private int mEnd;
private boolean isSkip = false;//是否跳页
private CollapsingToolbarLayout collapsingToolbar;
ImageAnimator(CollapsingToolbarLayout collapsingToolbar, ImageView targetImage, ImageView outgoingImage) {
this.collapsingToolbar = collapsingToolbar;
mTargetImage = targetImage;
mOutgoingImage = outgoingImage;
BindingUtils.loadImg(mTargetImage, mImages[0]);
Resources mResources = App.getAppContext().getResources();
int[] mColorDay = mResources.getIntArray(R.array.day_color_tab);
int[] mColorNight = mResources.getIntArray(R.array.night_color_tab);
mColors = SpUtil.isNight() ? mColorNight : mColorDay;
collapsingToolbar.setContentScrimColor(mColors[0]);
collapsingToolbar.setStatusBarScrimColor(mColors[0]);
}
/**
* 启动动画, 之后选择向前或向后滑动
*
* @param startPosition 起始位置
* @param endPosition 终止位置
*/
public void start(int startPosition, int endPosition) {
if (Math.abs(endPosition - startPosition) > 1) {
isSkip = true;
}
mActualStart = startPosition;
Log.e("DEBUG", "startPosition: " + startPosition + ", endPosition: " + endPosition);
// 终止位置的图片
//@DrawableRes int incomeId = ids[endPosition % ids.length];
// 原始图片
mOutgoingImage.setImageDrawable(mTargetImage.getDrawable()); // 原始的图片
// 起始图片
mOutgoingImage.setTranslationX(0f);
mOutgoingImage.setVisibility(View.VISIBLE);
mOutgoingImage.setAlpha(1.0f);
// 目标图片
// mTargetImage.setImageResource(incomeId);
BindingUtils.loadImg(mTargetImage, mImages[endPosition]);
mStart = Math.min(startPosition, endPosition);
mEnd = Math.max(startPosition, endPosition);
}
/**
* 滑动结束的动画效果
*
* @param endPosition 滑动位置
*/
public void end(int endPosition) {
isSkip = false;
//@DrawableRes int incomeId = ids[endPosition % ids.length];
Log.e("DEBUG", "endPosition: " + endPosition);
mTargetImage.setTranslationX(0f);
// 设置原始图片
if (endPosition == mActualStart) {
mTargetImage.setImageDrawable(mOutgoingImage.getDrawable());
} else {
BindingUtils.loadImg(mTargetImage, mImages[endPosition]);
collapsingToolbar.setContentScrimColor(mColors[endPosition]);
collapsingToolbar.setStatusBarScrimColor(mColors[endPosition]);
//mTargetImage.setImageResource(incomeId);
mTargetImage.setAlpha(1f);
mOutgoingImage.setVisibility(View.GONE);
}
}
// 向前滚动, 比如0->1, offset滚动的距离(0->1), 目标渐渐淡出
void forward(int position, float positionOffset) {
if (isSkip) return;
// Log.e("DEBUG-WCL", "forward-positionOffset: " + positionOffset);
int width = mTargetImage.getWidth();
mOutgoingImage.setTranslationX(-positionOffset * (FACTOR * width));
mTargetImage.setTranslationX((1 - positionOffset) * (FACTOR * width));
int color = BaseUtils.evaluate(positionOffset, mColors[position], mColors[position + 1]);
collapsingToolbar.setContentScrimColor(color);
collapsingToolbar.setStatusBarScrimColor(color);
mTargetImage.setAlpha(positionOffset);
}
// 向后滚动, 比如1->0, offset滚动的距离(1->0), 目标渐渐淡入
void backwards(int position, float positionOffset) {
if (isSkip) return;
// Log.e("DEBUG-WCL", "backwards-positionOffset: " + positionOffset);
int width = mTargetImage.getWidth();
mOutgoingImage.setTranslationX((1 - positionOffset) * (FACTOR * width));
mTargetImage.setTranslationX(-(positionOffset) * (FACTOR * width));
int color = BaseUtils.evaluate(1 - positionOffset, mColors[position + 1], mColors[position]);
collapsingToolbar.setContentScrimColor(color);
collapsingToolbar.setStatusBarScrimColor(color);
mTargetImage.setAlpha(1 - positionOffset);
}
// 判断停止
boolean isWithin(int position) {
return position >= mStart && position < mEnd;
}
}