package zone.com.zrefreshlayoutdemo.header; import android.app.Activity; import android.content.Context; import android.support.annotation.DrawableRes; import android.view.View; import android.view.ViewGroup; import android.view.animation.LinearInterpolator; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.nineoldandroids.animation.ValueAnimator; import zone.com.zanimate.value.ValueAnimatorProxy; import zone.com.zrefreshlayout.AUtils; import zone.com.zrefreshlayout.AnimateBack; import zone.com.zrefreshlayout.IHeaderView; import zone.com.zrefreshlayout.R; import zone.com.zrefreshlayout.ZRefreshLayout; import zone.com.zrefreshlayout.utils.DensityUtils; import zone.com.zrefreshlayout.utils.ScreenUtils; import static zone.com.zrefreshlayout.utils.LogUtils.log; /** * Created by lcodecore on 2016/10/2. */ public class SinaRefreshViewRefreshPositionTest implements IHeaderView { private ImageView refreshArrow; private ImageView loadingView; private TextView refreshTextView; private View rootView; private LinearLayout ll_main; public void setArrowResource(@DrawableRes int resId) { refreshArrow.setImageResource(resId); } public void setPullDownStr(String pullDownStr1) { pullDownStr = pullDownStr1; } public void setReleaseRefreshStr(String releaseRefreshStr1) { releaseRefreshStr = releaseRefreshStr1; } public void setRefreshingStr(String refreshingStr1) { refreshingStr = refreshingStr1; } private String pullDownStr = "下拉刷新"; private String releaseRefreshStr = "释放刷新"; private String refreshingStr = "正在刷新"; @Override public IHeaderView clone_() { SinaRefreshViewRefreshPositionTest clone = new SinaRefreshViewRefreshPositionTest(); return clone; } @Override public View getView(ZRefreshLayout zRefreshLayout) { rootView = View.inflate(zRefreshLayout.getContext(), R.layout.view_sinaheader, null); //注意inflate那种模式 第一层需要空出去 不然会wrapcontent ll_main = (LinearLayout) rootView.findViewById(R.id.ll_main); refreshArrow = (ImageView) rootView.findViewById(R.id.iv_arrow); refreshTextView = (TextView) rootView.findViewById(R.id.tv); loadingView = (ImageView) rootView.findViewById(R.id.iv_loading); screenAdapter(zRefreshLayout,zRefreshLayout.getContext()); return rootView; } private void screenAdapter(ZRefreshLayout zRefreshLayout,Context context) { int[] screenPixs = ScreenUtils.getScreenPix((Activity) context); ll_main.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT , (int) (screenPixs[1] * 0.1))); ViewGroup.LayoutParams refreshArrowLp = refreshArrow.getLayoutParams(); refreshArrowLp.width = getAnInt(71, screenPixs, true); refreshArrowLp.height = getAnInt(71, screenPixs, false); refreshArrow.setLayoutParams(refreshArrowLp); ViewGroup.LayoutParams loadingViewLp = loadingView.getLayoutParams(); loadingViewLp.width = getAnInt(71, screenPixs, true); loadingViewLp.height = getAnInt(71, screenPixs, false); loadingView.setLayoutParams(refreshArrowLp); //注意TextSiz 要的是sp 需要px转过去 refreshTextView.setTextSize(DensityUtils.px2sp(context, getAnInt(35, screenPixs, true))); //todo 这里是下拉到头部一半,则可刷新! AUtils.setHeaderHeightToRefresh(zRefreshLayout,(int) (screenPixs[1] * 0.05)); } //我的参考图是1080*1920 private int getAnInt(int dx, int[] screenPixs, boolean isWidth) { if (isWidth) return (int) (1F * dx / 1080 * screenPixs[0]); else return (int) (1F * dx / 1920 * screenPixs[1]); } @Override public void onPullingDown(float fraction, float headHeight) { } @Override public void refreshAble(boolean refreshAble) { if (refreshAble) { refreshArrow.animate().rotation(-180).start(); refreshTextView.setText(releaseRefreshStr); } else { refreshTextView.setText(pullDownStr); refreshArrow.animate().rotation(0).start(); } } @Override public void animateBack(AnimateBack animateBack, float fraction, float headHeight, boolean mIScroll) { } @Override public boolean interceptAnimateBack(AnimateBack animateBack, ZRefreshLayout.IScroll iScroll) { return false; } @Override public void onRefreshing(float headHeight, boolean isAutoRefresh) { refreshTextView.setText(refreshingStr); refreshArrow.setVisibility(View.GONE); loadingView.setVisibility(View.VISIBLE); valueAnimator.start(); log("onRefreshing"); } private ValueAnimatorProxy valueAnimator = ValueAnimatorProxy.ofInt(0, 360) .setDuration(1200) .setInterpolator(new LinearInterpolator()) .setRepeatCount(ValueAnimator.INFINITE) .addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { // 30 =360/12; // log("animation.getAnimatedValue():"+animation.getAnimatedValue()+"——————进度:"+((Integer) animation.getAnimatedValue()/30)*30F); loadingView.setRotation(((Integer) animation.getAnimatedValue() / 30) * 30F); } }); @Override public void onComplete() { refreshArrow.setVisibility(View.VISIBLE); loadingView.setVisibility(View.GONE); if (valueAnimator.isRunning()) valueAnimator.end(); log("onComplete"); } }