基本信息流完成下拉刷新新样式
This commit is contained in:
@ -0,0 +1,295 @@
|
||||
package com.gh.common.view;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.drawable.Animatable;
|
||||
import android.graphics.drawable.BitmapDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Build;
|
||||
import android.support.annotation.ColorInt;
|
||||
import android.support.annotation.ColorRes;
|
||||
import android.support.annotation.DrawableRes;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.Gravity;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.animation.LinearInterpolator;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.scwang.smartrefresh.layout.api.RefreshInternal;
|
||||
import com.scwang.smartrefresh.layout.api.RefreshKernel;
|
||||
import com.scwang.smartrefresh.layout.api.RefreshLayout;
|
||||
import com.scwang.smartrefresh.layout.constant.SpinnerStyle;
|
||||
import com.scwang.smartrefresh.layout.internal.ArrowDrawable;
|
||||
import com.scwang.smartrefresh.layout.internal.InternalAbstract;
|
||||
import com.scwang.smartrefresh.layout.internal.ProgressDrawable;
|
||||
import com.scwang.smartrefresh.layout.util.DensityUtil;
|
||||
|
||||
import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
|
||||
import static com.scwang.smartrefresh.layout.util.SmartUtil.getColor;
|
||||
|
||||
public abstract class AbstractSwipeRefreshHeader<T extends AbstractSwipeRefreshHeader> extends InternalAbstract implements RefreshInternal {
|
||||
public static final byte ID_TEXT_TITLE = 1;
|
||||
public static final byte ID_IMAGE_ARROW = 2;
|
||||
public static final byte ID_IMAGE_PROGRESS = 3;
|
||||
|
||||
protected TextView mTitleText;
|
||||
protected ImageView mArrowView;
|
||||
protected ImageView mProgressView;
|
||||
protected LinearLayout mCenterLayout;
|
||||
protected RefreshKernel mRefreshKernel;
|
||||
protected ArrowDrawable mArrowDrawable;
|
||||
protected ProgressDrawable mProgressDrawable;
|
||||
protected Integer mAccentColor;
|
||||
protected Integer mPrimaryColor;
|
||||
protected int mBackgroundColor;
|
||||
protected int mFinishDuration = 500;
|
||||
|
||||
private DensityUtil mDensityUtil = new DensityUtil();
|
||||
|
||||
public AbstractSwipeRefreshHeader(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
|
||||
mSpinnerStyle = SpinnerStyle.Translate;
|
||||
mArrowView = new ImageView(context);
|
||||
mProgressView = new ImageView(context);
|
||||
mTitleText = new TextView(context);
|
||||
mTitleText.setTextColor(0xff5d5d5d);
|
||||
mCenterLayout = new LinearLayout(context);
|
||||
mCenterLayout.setGravity(Gravity.CENTER_HORIZONTAL);
|
||||
mCenterLayout.setOrientation(LinearLayout.VERTICAL);
|
||||
|
||||
final View thisView = this;
|
||||
final ViewGroup thisGroup = this;
|
||||
final View arrowView = mArrowView;
|
||||
final View titleView = mTitleText;
|
||||
final View progressView = mProgressView;
|
||||
final ViewGroup centerLayout = mCenterLayout;
|
||||
|
||||
titleView.setId(ID_TEXT_TITLE);
|
||||
arrowView.setId(ID_IMAGE_ARROW);
|
||||
progressView.setId(ID_IMAGE_PROGRESS);
|
||||
centerLayout.setId(android.R.id.widget_frame);
|
||||
|
||||
LinearLayout.LayoutParams lpHeaderText = new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT);
|
||||
centerLayout.addView(titleView, lpHeaderText);
|
||||
|
||||
RelativeLayout.LayoutParams lpHeaderLayout = new RelativeLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT);
|
||||
lpHeaderLayout.addRule(CENTER_IN_PARENT);
|
||||
thisGroup.addView(centerLayout, lpHeaderLayout);
|
||||
|
||||
RelativeLayout.LayoutParams lpArrow = new RelativeLayout.LayoutParams(mDensityUtil.dip2px(15), mDensityUtil.dip2px(15));
|
||||
lpArrow.addRule(CENTER_VERTICAL);
|
||||
lpArrow.addRule(LEFT_OF, android.R.id.widget_frame);
|
||||
thisGroup.addView(arrowView, lpArrow);
|
||||
|
||||
RelativeLayout.LayoutParams lpProgress = new RelativeLayout.LayoutParams((ViewGroup.LayoutParams) lpArrow);
|
||||
lpProgress.addRule(CENTER_VERTICAL);
|
||||
lpProgress.addRule(LEFT_OF, android.R.id.widget_frame);
|
||||
progressView.animate().setInterpolator(new LinearInterpolator());
|
||||
thisGroup.addView(progressView, lpProgress);
|
||||
|
||||
if (thisView.isInEditMode()) {
|
||||
arrowView.setVisibility(GONE);
|
||||
} else {
|
||||
progressView.setVisibility(GONE);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDetachedFromWindow() {
|
||||
super.onDetachedFromWindow();
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
|
||||
final View arrowView = mArrowView;
|
||||
final View progressView = mProgressView;
|
||||
arrowView.animate().cancel();
|
||||
progressView.animate().cancel();
|
||||
}
|
||||
final Drawable drawable = mProgressView.getDrawable();
|
||||
if (drawable instanceof Animatable) {
|
||||
if (((Animatable) drawable).isRunning()) {
|
||||
((Animatable) drawable).stop();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected T self() {
|
||||
//noinspection unchecked
|
||||
return (T) this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onInitialized(@NonNull RefreshKernel kernel, int height, int maxDragHeight) {
|
||||
mRefreshKernel = kernel;
|
||||
mRefreshKernel.requestDrawBackgroundFor(this, mBackgroundColor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStartAnimator(@NonNull RefreshLayout refreshLayout, int height, int maxDragHeight) {
|
||||
if (mProgressView.getVisibility() != VISIBLE) {
|
||||
mProgressView.setVisibility(VISIBLE);
|
||||
Drawable drawable = mProgressView.getDrawable();
|
||||
if (drawable instanceof Animatable) {
|
||||
((Animatable) drawable).start();
|
||||
} else {
|
||||
mProgressView.animate().rotation(36000).setDuration(100000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReleased(@NonNull RefreshLayout refreshLayout, int height, int maxDragHeight) {
|
||||
onStartAnimator(refreshLayout, height, maxDragHeight);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int onFinish(@NonNull RefreshLayout refreshLayout, boolean success) {
|
||||
Drawable drawable = mProgressView.getDrawable();
|
||||
if (drawable instanceof Animatable) {
|
||||
if (((Animatable) drawable).isRunning()) {
|
||||
((Animatable) drawable).stop();
|
||||
}
|
||||
} else {
|
||||
mProgressView.animate().rotation(0).setDuration(0);
|
||||
}
|
||||
mProgressView.setVisibility(GONE);
|
||||
return mFinishDuration;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
public void setPrimaryColors(@ColorInt int... colors) {
|
||||
if (colors.length > 0) {
|
||||
final View thisView = this;
|
||||
if (!(thisView.getBackground() instanceof BitmapDrawable) && mPrimaryColor == null) {
|
||||
setPrimaryColor(colors[0]);
|
||||
mPrimaryColor = null;
|
||||
}
|
||||
if (mAccentColor == null) {
|
||||
if (colors.length > 1) {
|
||||
setAccentColor(colors[1]);
|
||||
}
|
||||
mAccentColor = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public T setProgressDrawable(Drawable drawable) {
|
||||
mProgressDrawable = null;
|
||||
mProgressView.setImageDrawable(drawable);
|
||||
return self();
|
||||
}
|
||||
|
||||
public T setProgressResource(@DrawableRes int resId) {
|
||||
mProgressDrawable = null;
|
||||
mProgressView.setImageResource(resId);
|
||||
return self();
|
||||
}
|
||||
|
||||
public T setArrowDrawable(Drawable drawable) {
|
||||
mArrowDrawable = null;
|
||||
mArrowView.setImageDrawable(drawable);
|
||||
return self();
|
||||
}
|
||||
|
||||
public T setArrowResource(@DrawableRes int resId) {
|
||||
mArrowDrawable = null;
|
||||
mArrowView.setImageResource(resId);
|
||||
return self();
|
||||
}
|
||||
|
||||
public T setSpinnerStyle(SpinnerStyle style) {
|
||||
this.mSpinnerStyle = style;
|
||||
return self();
|
||||
}
|
||||
|
||||
public T setPrimaryColor(@ColorInt int primaryColor) {
|
||||
mBackgroundColor = mPrimaryColor = primaryColor;
|
||||
if (mRefreshKernel != null) {
|
||||
mRefreshKernel.requestDrawBackgroundFor(this, mPrimaryColor);
|
||||
}
|
||||
return self();
|
||||
}
|
||||
|
||||
public T setAccentColor(@ColorInt int accentColor) {
|
||||
mAccentColor = accentColor;
|
||||
mTitleText.setTextColor(accentColor);
|
||||
if (mArrowDrawable != null) {
|
||||
mArrowDrawable.setColor(accentColor);
|
||||
}
|
||||
if (mProgressDrawable != null) {
|
||||
mProgressDrawable.setColor(accentColor);
|
||||
}
|
||||
return self();
|
||||
}
|
||||
|
||||
public T setPrimaryColorId(@ColorRes int colorId) {
|
||||
final View thisView = this;
|
||||
setPrimaryColor(getColor(thisView.getContext(), colorId));
|
||||
return self();
|
||||
}
|
||||
|
||||
public T setAccentColorId(@ColorRes int colorId) {
|
||||
final View thisView = this;
|
||||
setAccentColor(getColor(thisView.getContext(), colorId));
|
||||
return self();
|
||||
}
|
||||
|
||||
public T setFinishDuration(int delay) {
|
||||
mFinishDuration = delay;
|
||||
return self();
|
||||
}
|
||||
|
||||
public T setTextSizeTitle(float size) {
|
||||
mTitleText.setTextSize(size);
|
||||
if (mRefreshKernel != null) {
|
||||
mRefreshKernel.requestRemeasureHeightFor(this);
|
||||
}
|
||||
return self();
|
||||
}
|
||||
|
||||
public T setDrawableMarginRight(float dp) {
|
||||
final View arrowView = mArrowView;
|
||||
final View progressView = mProgressView;
|
||||
MarginLayoutParams lpArrow = (MarginLayoutParams) arrowView.getLayoutParams();
|
||||
MarginLayoutParams lpProgress = (MarginLayoutParams) progressView.getLayoutParams();
|
||||
lpArrow.rightMargin = lpProgress.rightMargin = DensityUtil.dp2px(dp);
|
||||
arrowView.setLayoutParams(lpArrow);
|
||||
progressView.setLayoutParams(lpProgress);
|
||||
return self();
|
||||
}
|
||||
|
||||
public T setDrawableSize(float dp) {
|
||||
final View arrowView = mArrowView;
|
||||
final View progressView = mProgressView;
|
||||
ViewGroup.LayoutParams lpArrow = arrowView.getLayoutParams();
|
||||
ViewGroup.LayoutParams lpProgress = progressView.getLayoutParams();
|
||||
lpArrow.width = lpProgress.width = DensityUtil.dp2px(dp);
|
||||
lpArrow.height = lpProgress.height = DensityUtil.dp2px(dp);
|
||||
arrowView.setLayoutParams(lpArrow);
|
||||
progressView.setLayoutParams(lpProgress);
|
||||
return self();
|
||||
}
|
||||
|
||||
public T setDrawableArrowSize(float dp) {
|
||||
final View arrowView = mArrowView;
|
||||
ViewGroup.LayoutParams lpArrow = arrowView.getLayoutParams();
|
||||
lpArrow.height = lpArrow.width = DensityUtil.dp2px(dp);
|
||||
arrowView.setLayoutParams(lpArrow);
|
||||
return self();
|
||||
}
|
||||
|
||||
public T setDrawableProgressSize(float dp) {
|
||||
final View progressView = mProgressView;
|
||||
ViewGroup.LayoutParams lpProgress = progressView.getLayoutParams();
|
||||
lpProgress.height = lpProgress.width = DensityUtil.dp2px(dp);
|
||||
progressView.setLayoutParams(lpProgress);
|
||||
return self();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user