具有回弹效果的RecyclerView,RecyclerView外层可滚动容器(二)

本文介绍如何实现一个具有回弹效果的RecyclerView,同时探讨外层可滚动容器的事件分发机制。通过自定义容器并在dispatchTouchEvent中判断RecyclerView的状态,实现上拉下拉回弹效果。此外,利用onLayout实现弹性效果,并提供关键代码示例,强调理解事件分发的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇菊花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
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值