上一篇菊花loading可以根据项目的的UI设计要求设置自己需要的样式,现在再贴一 段color[]代码,
private String[] color = {"#aaaaaa", "#999999", "#888888", "#777777", "#666666", "#bbbbbb"};
这个颜色数组可以可以很好的模仿出ios的菊花颜色,然后是菊花矩形圆角问题, 可以使用canvas.drawRoundRect( RectF rect, float rx, float ry, Paint paint),这样就可以完美的解决问题了。本来老铁说上一篇菊花loading会火的,因为网上没有写过类似的文章,可惜到现在也没火。哎,废话不多了,上一篇说过要给大家一个全新的弹性容器,不过在此之前我还是要想说一句,view的事件分发机制,大家一定要弄清楚,这样在阅读下面代码的时候会事半功倍。
效果图:
实现原理:定义一个外层容器,内层可以是recyclerview,Listview,ScrollView等可以滑动的组件,主要是在事件分发上动手脚,在事件分发dispatchTouchEvent中根据内层recyclerview中可见的item是否处于顶部或者底部来处理事件分发(自己消费掉或者将事件交由当前view的onlnterceptTouchEvent进行事件拦截,而此处事件不拦截,交给recycelrview进行消费),还是那句话把事件分发搞明白,具体查看具有回弹效果的RecyclerView,RecyclerView外层可滚动容器,不会的一定要搞明白了,哈哈,我实诚吧。
还有下面的弹性是通过onlayout来实现的,和上一篇的弹性容器不一样,大家可以参考上一篇进行修改,重要的点会在下面代码中给大家进行讲解
/**
* Created by Sick on 2016/12/1.
*/
public class PullRecyclerViewGroup extends LinearLayout implements ViewTreeObserver.OnGlobalLayoutListener {
/**
* 滚动时间
*/
private static final long ANIM_TIME = 400;
//listview 或者recyclerview或者ScrollView
private View childView;
// 用于记录正常的布局位置
private Rect originalRect = new Rect();
//滚动时,移动的view和位置
private List<View> mMoveViews = new ArrayList<View>();
private List<Rect> mMoveRects = new ArrayList<Rect>();
// 在手指滑动的过程中记录是否移动了布局
private boolean isMoved = false;
// 如果按下时不能上拉和下拉, 会在手指移动时更新为当前手指的Y值
private float startY;
//阻尼
private static final float OFFSET_RADIO = 0.5f;
private boolean isRecyclerReuslt = false;
public PullRecyclerViewGroup(Context context) {
thi