RecyclerView Anchor

    RecyclerView 有scrollToPosition和smoothScrollToPosition,其实它还具备锚点(Anchor)功能不过没提供给外部使用。锚点功能在activity切换前后时触发。

    在activity切到后台时onSaveInstanceState将保存当前的滚动位置,滚动位置其实就是当前可见的第一个(或最后一个)View的position。来看看LinearLayoutManager是怎么实现的。

    @Override
    public Parcelable onSaveInstanceState() {
        if (mPendingSavedState != null) {
            return new SavedState(mPendingSavedState);
        }
        SavedState state = new SavedState();
        if (getChildCount() > 0) {
            ensureLayoutState();
            boolean didLayoutFromEnd = mLastStackFromEnd ^ mShouldReverseLayout;
            state.mAnchorLayoutFromEnd = didLayoutFromEnd;
            if (didLayoutFromEnd) {
                final View refChild = getChildClosestToEnd();
                state.mAnchorOffset = mOrientationHelper.getEndAfterPadding() -
                        mOrientationHelper.getDecoratedEnd(refChild);
                state.mAnchorPosition = getPosition(refChild);
            } else {
                final View refChild = getChildClosestToStart();
                state.mAnchorPosition = getPosition(refChild);
                state.mAnchorOffset = mOrientationHelper.getDecoratedStart(refChild) -
                        mOrientationHelper.getStartAfterPadding();
            }
        } else {
            state.invalidateAnchor();
        }
        return state;
    }

在activity切回时onRestoreInstanceState重新设置锚点。

    @Override
    public void onRestoreInstanceState(Parcelable state) {
        if (state instanceof SavedState) {
            mPendingSavedState = (SavedState) state;
            requestLayout();
            if (DEBUG) {
                Log.d(TAG, "loaded saved state");
            }
        } else if (DEBUG) {
            Log.d(TAG, "invalid saved state class");
        }
    }

实际锚点功能跟scrollToPosition的逻辑实现是基本相同的。那么这个锚点有什么作用呢?替换scrollToPosition,锚点和scrollToPosition都是直接跳转到制定位置,在scrollToPosition抽风的时候用smoothScrollToPosition在一些场合是很容易导致崩溃,用锚点就可了。

转载于:https://my.oschina.net/droidwolf/blog/880994

Anchor-free目标检测是一种目标检测算法,它与传统的基于Anchor的目标检测方法相比,不需要使用预定义的Anchor框来检测目标。Anchor-free目标检测的主要思想是通过关键点检测或物体中心点来定位目标。 在Anchor-free目标检测中,有几种常见的方法。一种是通过关键点检测方法来进行目标定位,即通过检测物体的关键点来确定目标的位置和边界框。另一种方法是通过预测物体的中心点来定位目标。这些方法都避免了使用预先定义的Anchor框,从而提高了目标检测的准确性和效率。 Anchor-free目标检测在很多方面都有其优势。例如,它能够在精度上媲美基于Anchor的方法,这是因为它使用了一些技术,如FPN和FocalLoss,来提高检测的准确性。此外,Anchor-free方法还可以减少算法的复杂性,提高检测的速度。 选择使用Anchor-free还是Anchor-based方法取决于具体的应用场景和需求。在训练过程中,如果选择的正负样本保持一致,无论是基于Anchor进行回归还是基于关键点进行回归,得到的检测结果是相近的。因此,根据实际情况选择适合的方法进行目标检测。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [深度学习系列之Anchor based 和 Anchor free 目标检测方法](https://blog.csdn.net/weixin_38716233/article/details/124623978)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值