From c07b919d0331c0466c9c4de39eb34f127375bb4b Mon Sep 17 00:00:00 2001 From: lcodecore Date: Wed, 12 Oct 2016 23:06:22 +0800 Subject: [PATCH] to optimize the display effect and fix bugs. --- README.md | 11 ++++++++ .../GridViewFragment.java | 23 ++++++++++------ .../ListViewFragment.java | 26 ++++++++++++------- .../RecyclerFragment.java | 10 ++----- .../tkrefreshlayout/header/GoogleDotView.java | 13 ++++++---- .../header/SinaRefreshView.java | 24 +++++++---------- 6 files changed, 61 insertions(+), 46 deletions(-) diff --git a/README.md b/README.md index a668b49..4b48242 100644 --- a/README.md +++ b/README.md @@ -226,3 +226,14 @@ startAnim则是在onRefresh/onLoadMore之后才会回调的过程(此处是显 - 制作一个star相关的动效。 - 对回弹效果做一下优化,比如支持使用不同的插值器 - 带视差效果的Header + +## 更新日志 +#### v1.03 +- 扩展了更多的属性 +- 修复Fragment回收 +#### v1.02 +- 修复加载更多列表控件的显示问题 +#### v1.01 +- 支持了RecyclerView、ScrollView、AbsListView、WebView +- 支持越界回弹 +- 支持个性化Header、Footer \ No newline at end of file diff --git a/app/src/main/java/com/lcodecore/twinklingrefreshlayout/GridViewFragment.java b/app/src/main/java/com/lcodecore/twinklingrefreshlayout/GridViewFragment.java index 9957967..298d043 100644 --- a/app/src/main/java/com/lcodecore/twinklingrefreshlayout/GridViewFragment.java +++ b/app/src/main/java/com/lcodecore/twinklingrefreshlayout/GridViewFragment.java @@ -1,6 +1,7 @@ package com.lcodecore.twinklingrefreshlayout; import android.os.Bundle; +import android.os.Handler; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.LayoutInflater; @@ -31,19 +32,13 @@ public class GridViewFragment extends Fragment { public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { if (rootView == null) { rootView = inflater.inflate(R.layout.fragment_gridview, container, false); + setupGridView((GridView) rootView.findViewById(R.id.gridView)); } return rootView; } - @Override - public void onActivityCreated(@Nullable Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - - setupGridView((GridView) rootView.findViewById(R.id.gridView)); - } - private void setupGridView(GridView gridView) { - TwinklingRefreshLayout refreshLayout = (TwinklingRefreshLayout) rootView.findViewById(R.id.refresh); + final TwinklingRefreshLayout refreshLayout = (TwinklingRefreshLayout) rootView.findViewById(R.id.refresh); //TextHeaderView headerView = (TextHeaderView) View.inflate(getContext(),R.layout.header_tv,null); SinaRefreshView headerView = new SinaRefreshView(getContext()); refreshLayout.setHeaderView(headerView); @@ -52,6 +47,18 @@ private void setupGridView(GridView gridView) { refreshLayout.setBottomView(loadingView); gridView.setAdapter(new SimpleAdapter()); + + refreshLayout.setOnRefreshListener(new TwinklingRefreshLayout.OnRefreshListener(){ + @Override + public void onRefresh(final TwinklingRefreshLayout refreshLayout) { + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + refreshLayout.finishRefreshing(); + } + },2000); + } + }); } public class SimpleAdapter extends BaseAdapter { diff --git a/app/src/main/java/com/lcodecore/twinklingrefreshlayout/ListViewFragment.java b/app/src/main/java/com/lcodecore/twinklingrefreshlayout/ListViewFragment.java index 562570e..e949755 100644 --- a/app/src/main/java/com/lcodecore/twinklingrefreshlayout/ListViewFragment.java +++ b/app/src/main/java/com/lcodecore/twinklingrefreshlayout/ListViewFragment.java @@ -1,6 +1,7 @@ package com.lcodecore.twinklingrefreshlayout; import android.os.Bundle; +import android.os.Handler; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.LayoutInflater; @@ -11,6 +12,8 @@ import android.widget.ListView; import android.widget.TextView; +import com.lcodecore.tkrefreshlayout.TwinklingRefreshLayout; + import java.util.ArrayList; import java.util.List; @@ -27,21 +30,24 @@ public class ListViewFragment extends Fragment { public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { if (rootView == null) { rootView = inflater.inflate(R.layout.fragment_listview, container, false); + setupListView((ListView) rootView.findViewById(R.id.listView)); } return rootView; } - @Override - public void onActivityCreated(@Nullable Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - - setupListView((ListView) rootView.findViewById(R.id.listView)); - } - private void setupListView(ListView listView) { - //TwinklingRefreshLayout refreshLayout = (TwinklingRefreshLayout) rootView.findViewById(R.id.refresh); - //refreshLayout.setEnableLoadmore(false); - + TwinklingRefreshLayout refreshLayout = (TwinklingRefreshLayout) rootView.findViewById(R.id.refresh); + refreshLayout.setOnRefreshListener(new TwinklingRefreshLayout.OnRefreshListener(){ + @Override + public void onRefresh(final TwinklingRefreshLayout refreshLayout) { + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + refreshLayout.finishRefreshing(); + } + }, 3000); + } + }); listView.setAdapter(new SimpleAdapter()); } diff --git a/app/src/main/java/com/lcodecore/twinklingrefreshlayout/RecyclerFragment.java b/app/src/main/java/com/lcodecore/twinklingrefreshlayout/RecyclerFragment.java index 5ecc13b..3a3eb8c 100644 --- a/app/src/main/java/com/lcodecore/twinklingrefreshlayout/RecyclerFragment.java +++ b/app/src/main/java/com/lcodecore/twinklingrefreshlayout/RecyclerFragment.java @@ -33,18 +33,12 @@ public class RecyclerFragment extends Fragment { public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { if (rootView==null){ rootView = inflater.inflate(R.layout.fragment_recycler,container,false); + RecyclerView rv = (RecyclerView) rootView.findViewById(R.id.recyclerview); + setupRecyclerView(rv); } return rootView; } - @Override - public void onActivityCreated(@Nullable Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - - RecyclerView rv = (RecyclerView) rootView.findViewById(R.id.recyclerview); - setupRecyclerView(rv); - } - private void setupRecyclerView(RecyclerView recyclerView) { recyclerView.setLayoutManager(new LinearLayoutManager(recyclerView.getContext())); final SimpleStringRecyclerViewAdapter adapter = new SimpleStringRecyclerViewAdapter(getContext()); diff --git a/library/src/main/java/com/lcodecore/tkrefreshlayout/header/GoogleDotView.java b/library/src/main/java/com/lcodecore/tkrefreshlayout/header/GoogleDotView.java index ab1b86e..22f2003 100644 --- a/library/src/main/java/com/lcodecore/tkrefreshlayout/header/GoogleDotView.java +++ b/library/src/main/java/com/lcodecore/tkrefreshlayout/header/GoogleDotView.java @@ -11,6 +11,7 @@ import com.lcodecore.tkrefreshlayout.R; import com.lcodecore.tkrefreshlayout.IHeaderView; +import com.lcodecore.tkrefreshlayout.utils.DensityUtil; /** * Created by lcodecore on 2016/10/2. @@ -18,7 +19,7 @@ public class GoogleDotView extends View implements IHeaderView { private Paint mPath; - private float r = 12; + private float r; private int num = 5; public void setCir_x(int cir_x) { @@ -47,6 +48,8 @@ public GoogleDotView(Context context, AttributeSet attrs, int defStyleAttr) { ValueAnimator animator1, animator2; private void init() { + r = DensityUtil.dp2px(getContext(),4); + mPath = new Paint(); mPath.setAntiAlias(true); mPath.setColor(Color.rgb(114, 114, 114)); @@ -169,8 +172,8 @@ public View getView() { @Override public void onPullingDown(float fraction, float maxHeadHeight, float headHeight) { - setScaleX(1 + fraction / 4); - setScaleY(1 + fraction / 4); + setScaleX(1 + fraction / 2); + setScaleY(1 + fraction / 2); animating = false; if (animator1.isRunning()) { animator1.cancel(); @@ -181,8 +184,8 @@ public void onPullingDown(float fraction, float maxHeadHeight, float headHeight) @Override public void onPullReleasing(float fraction, float maxHeadHeight, float headHeight) { - setScaleX(1 + fraction / 4); - setScaleY(1 + fraction / 4); + setScaleX(1 + fraction / 2); + setScaleY(1 + fraction / 2); if (fraction < 1.0f) { animating = false; if (animator1.isRunning()) { diff --git a/library/src/main/java/com/lcodecore/tkrefreshlayout/header/SinaRefreshView.java b/library/src/main/java/com/lcodecore/tkrefreshlayout/header/SinaRefreshView.java index 5095716..8725228 100644 --- a/library/src/main/java/com/lcodecore/tkrefreshlayout/header/SinaRefreshView.java +++ b/library/src/main/java/com/lcodecore/tkrefreshlayout/header/SinaRefreshView.java @@ -1,6 +1,7 @@ package com.lcodecore.tkrefreshlayout.header; import android.content.Context; +import android.graphics.drawable.AnimationDrawable; import android.support.annotation.DrawableRes; import android.util.AttributeSet; import android.view.View; @@ -20,7 +21,6 @@ public class SinaRefreshView extends FrameLayout implements IHeaderView { private ImageView refreshArrow; private ImageView loadingView; private TextView refreshTextView; - private View rootView; public SinaRefreshView(Context context) { this(context, null); @@ -32,20 +32,15 @@ public SinaRefreshView(Context context, AttributeSet attrs) { public SinaRefreshView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); - + init(); } - @Override - protected void onAttachedToWindow() { - super.onAttachedToWindow(); - - if (rootView == null) { - rootView = View.inflate(getContext(), R.layout.view_sinaheader, null); - refreshArrow = (ImageView) rootView.findViewById(R.id.iv_arrow); - refreshTextView = (TextView) rootView.findViewById(R.id.tv); - loadingView = (ImageView) rootView.findViewById(R.id.iv_loading); - addView(rootView); - } + private void init(){ + View rootView = View.inflate(getContext(), R.layout.view_sinaheader, null); + refreshArrow = (ImageView) rootView.findViewById(R.id.iv_arrow); + refreshTextView = (TextView) rootView.findViewById(R.id.tv); + loadingView = (ImageView) rootView.findViewById(R.id.iv_loading); + addView(rootView); } public void setArrowResource(@DrawableRes int resId) { @@ -78,8 +73,6 @@ public void onPullingDown(float fraction, float maxHeadHeight, float headHeight) if (fraction < 1f) refreshTextView.setText(pullDownStr); if (fraction > 1f) refreshTextView.setText(releaseRefreshStr); refreshArrow.setRotation(fraction * headHeight / maxHeadHeight * 180); - - } @Override @@ -99,6 +92,7 @@ public void startAnim(float maxHeadHeight, float headHeight) { refreshTextView.setText(refreshingStr); refreshArrow.setVisibility(GONE); loadingView.setVisibility(VISIBLE); + ((AnimationDrawable)loadingView.getDrawable()).start(); } @Override