From b636a0b5e1ffbf11540e0cf2cb09b5f0cc3a6b59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BD=98=E5=93=B2?= Date: Mon, 10 Oct 2016 16:44:50 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=8B=E6=8B=89=E5=88=B7?= =?UTF-8?q?=E6=96=B0=E5=92=8C=E4=B8=8A=E6=8B=89=E5=8A=A0=E8=BD=BD=E7=9A=84?= =?UTF-8?q?=E6=8F=90=E7=A4=BA=E7=AE=AD=E5=A4=B4=E5=8A=A8=E7=94=BB=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原项目的箭头动画会在执行第一次刷新或加载操作后旋转180度,此后的所有刷新或加载操作动画都被影响。 我在刷新或加载完成的方法里加入了旋转操作,使被旋转的动画回到初始状态。 --- FooterView.java | 135 ++++++++++++++++++++++++++++++++++++++++++++++++ HeaderView.java | 135 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 270 insertions(+) create mode 100644 FooterView.java create mode 100644 HeaderView.java diff --git a/FooterView.java b/FooterView.java new file mode 100644 index 0000000..78a4cfb --- /dev/null +++ b/FooterView.java @@ -0,0 +1,135 @@ +package q.rorbin.qrefreshlayout; + +import android.animation.ObjectAnimator; +import android.content.Context; +import android.util.AttributeSet; +import android.view.Gravity; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ProgressBar; +import android.widget.TextView; + +/** + * LoadView默认实现 + * @author chqiu + */ +public class FooterView extends QLoadView { + private int mState; + + private ImageView mIvIcon; + private TextView mTvTips; + private ProgressBar mProgressBar; + + + private final int mMargin = QRefreshUtil.dp2px(getContext(), 15); + private ViewGroup mContent; + + public FooterView(Context context) { + this(context, null); + } + + public FooterView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public FooterView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(); + } + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + int width = getMeasuredWidth(); + int height = getMeasuredHeight(); + measureChild(mContent, MeasureSpec.makeMeasureSpec(width, MeasureSpec.AT_MOST) + , MeasureSpec.makeMeasureSpec(height, MeasureSpec.AT_MOST)); + mContent.layout(0, mMargin, width, mContent.getMeasuredHeight() + mMargin); + } + + @Override + public void setRefreshing() { + if (mState != STATE_REFRESH) { + mIvIcon.setVisibility(View.GONE); + mProgressBar.setVisibility(View.VISIBLE); + mTvTips.setText(getContext().getString(R.string.loading_tips)); + mState = STATE_REFRESH; + } + } + + @Override + public void setNormal() { + if (mState != STATE_NORMAL) { + mIvIcon.setVisibility(View.VISIBLE); + mProgressBar.setVisibility(View.GONE); + if (mState == STATE_PULLING) { + ObjectAnimator.ofFloat(mIvIcon, "rotation", 180, 0).start(); + } + mTvTips.setText(getContext().getString(R.string.normal_tips_2)); + mState = STATE_NORMAL; + } + } + + @Override + public void setPulling() { + if (mState != STATE_PULLING) { + mIvIcon.setVisibility(View.VISIBLE); + mProgressBar.setVisibility(View.GONE); + if (mState == STATE_NORMAL) { + ObjectAnimator.ofFloat(mIvIcon, "rotation", 0, 180).start(); + } + mTvTips.setText(getContext().getString(R.string.pulling_tips_2)); + mState = STATE_PULLING; + } + } + + @Override + public void setComplete() { + if (mState != STATE_COMPLETE) { + mIvIcon.setVisibility(View.GONE); + mProgressBar.setVisibility(View.GONE); + mTvTips.setText(getContext().getString(R.string.complete_tips)); + mState = STATE_COMPLETE; + ObjectAnimator.ofFloat(mIvIcon, "rotation", 180, 0).start(); + } + } + + private void init() { + LinearLayout content = new LinearLayout(getContext()); + content.setGravity(Gravity.CENTER); + content.setOrientation(LinearLayout.HORIZONTAL); + mContent = content; + addView(mContent); + initContentView(); + } + + private void initContentView() { + mContent.removeAllViews(); + ImageView imageView = new ImageView(getContext()); + LinearLayout.LayoutParams imageViewParmas = + new LinearLayout.LayoutParams(QRefreshUtil.dp2px(getContext(), 20), QRefreshUtil.dp2px(getContext(), 20)); + imageViewParmas.setMargins(0, 0, QRefreshUtil.dp2px(getContext(), 10), 0); + imageView.setLayoutParams(imageViewParmas); + imageView.setImageResource(R.drawable.icon_pull_2); + mContent.addView(imageView); + + ProgressBar progress = new ProgressBar(getContext()); + LinearLayout.LayoutParams progressParmas = + new LinearLayout.LayoutParams(QRefreshUtil.dp2px(getContext(), 20), QRefreshUtil.dp2px(getContext(), 20)); + progressParmas.setMargins(0, 0, QRefreshUtil.dp2px(getContext(), 10), 0); + progress.setLayoutParams(progressParmas); + progress.setVisibility(View.GONE); + mContent.addView(progress); + + TextView tvTips = new TextView(getContext()); + tvTips.setText("上拉加载更多..."); + mContent.addView(tvTips); + + mIvIcon = imageView; + mTvTips = tvTips; + mProgressBar = progress; + + mState = STATE_NORMAL; + } +} diff --git a/HeaderView.java b/HeaderView.java new file mode 100644 index 0000000..454c384 --- /dev/null +++ b/HeaderView.java @@ -0,0 +1,135 @@ +package q.rorbin.qrefreshlayout; + +import android.animation.ObjectAnimator; +import android.content.Context; +import android.util.AttributeSet; +import android.view.Gravity; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ProgressBar; +import android.widget.TextView; + +/** + * LoadView默认实现 + * @author chqiu + */ +public class HeaderView extends QLoadView { + private int mState; + + private ImageView mIvIcon; + private TextView mTvTips; + private ProgressBar mProgressBar; + + + private final int mBottomMargin = QRefreshUtil.dp2px(getContext(), 15); + private ViewGroup mContent; + + public HeaderView(Context context) { + this(context, null); + } + + public HeaderView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public HeaderView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(); + } + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + int width = getMeasuredWidth(); + int height = getMeasuredHeight(); + measureChild(mContent, MeasureSpec.makeMeasureSpec(width, MeasureSpec.AT_MOST) + , MeasureSpec.makeMeasureSpec(height, MeasureSpec.AT_MOST)); + mContent.layout(0, height - mContent.getMeasuredHeight() - mBottomMargin, width, height - mBottomMargin); + } + + @Override + public void setRefreshing() { + if (mState != STATE_REFRESH) { + mIvIcon.setVisibility(View.GONE); + mProgressBar.setVisibility(View.VISIBLE); + mTvTips.setText(getContext().getString(R.string.loading_tips)); + mState = STATE_REFRESH; + } + } + + @Override + public void setNormal() { + if (mState != STATE_NORMAL) { + mIvIcon.setVisibility(View.VISIBLE); + mProgressBar.setVisibility(View.GONE); + if(mState == STATE_PULLING){ + ObjectAnimator.ofFloat(mIvIcon,"rotation",180,0).start(); + } + mTvTips.setText(getContext().getString(R.string.normal_tips)); + mState = STATE_NORMAL; + } + } + + @Override + public void setPulling() { + if (mState != STATE_PULLING) { + mIvIcon.setVisibility(View.VISIBLE); + mProgressBar.setVisibility(View.GONE); + if(mState == STATE_NORMAL){ + ObjectAnimator.ofFloat(mIvIcon,"rotation",0,180).start(); + } + mTvTips.setText(getContext().getString(R.string.pulling_tips)); + mState = STATE_PULLING; + } + } + + @Override + public void setComplete() { + if (mState != STATE_COMPLETE) { + mIvIcon.setVisibility(View.GONE); + mProgressBar.setVisibility(View.GONE); + mTvTips.setText(getContext().getString(R.string.complete_tips)); + mState = STATE_COMPLETE; + ObjectAnimator.ofFloat(mIvIcon,"rotation",180,0).start(); + } + } + + private void init() { + LinearLayout content = new LinearLayout(getContext()); + content.setGravity(Gravity.CENTER); + content.setOrientation(LinearLayout.HORIZONTAL); + mContent = content; + addView(mContent); + initContentView(); + } + + private void initContentView() { + mContent.removeAllViews(); + ImageView imageView = new ImageView(getContext()); + LinearLayout.LayoutParams imageViewParmas = + new LinearLayout.LayoutParams(QRefreshUtil.dp2px(getContext(), 20), QRefreshUtil.dp2px(getContext(), 20)); + imageViewParmas.setMargins(0, 0, QRefreshUtil.dp2px(getContext(), 10), 0); + imageView.setLayoutParams(imageViewParmas); + imageView.setImageResource(R.drawable.icon_pull); + mContent.addView(imageView); + + ProgressBar progress = new ProgressBar(getContext()); + LinearLayout.LayoutParams progressParmas = + new LinearLayout.LayoutParams(QRefreshUtil.dp2px(getContext(), 20), QRefreshUtil.dp2px(getContext(), 20)); + progressParmas.setMargins(0, 0, QRefreshUtil.dp2px(getContext(), 10), 0); + progress.setLayoutParams(progressParmas); + progress.setVisibility(View.GONE); + mContent.addView(progress); + + TextView tvTips = new TextView(getContext()); + tvTips.setText("下拉刷新..."); + mContent.addView(tvTips); + + mIvIcon = imageView; + mTvTips = tvTips; + mProgressBar = progress; + + mState = STATE_NORMAL; + } +}