国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

[Android]自定義RecyclerView中View的動畫

這篇具有很好參考價(jià)值的文章主要介紹了[Android]自定義RecyclerView中View的動畫。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

參考默認(rèn)動畫類DefaultItemAnimator

官方有一個(gè)默認(rèn)Item動畫類DafaultItemAnimator,其中 DefaultItemAnimator 繼承了SimpleItemAnimator 繼承了 RecyclerView.ItemAnimator

  1. SimpleItemAnimator 它是一個(gè)包裝類,用來判斷當(dāng)前的ViewHolder到底是執(zhí)行移動、移除、添加或者改變等行為。
  2. DefaultItemAnimator 是執(zhí)行具體動畫類,它負(fù)責(zé)將viewHolder初始化、保存需要執(zhí)行動畫的ViveHolder以及動畫信息、執(zhí)行具體的動畫。 我們自定義ItemAnimtor 也是仿照這個(gè)來的。
  3. 其中DefaultItemAnimator中 animate + 動作 為名的的方法(比如animateAdd())做的事情有:計(jì)算動畫信息,保存動畫信息,初始化view的狀態(tài),且可以控制該VIewHolder是否執(zhí)行該次動畫,如果返回值為false那么那么不會執(zhí)行該ViewHolder的改次動畫。
  4. DefaultItemAnimator中animate + 動作 + Impl 為名的方法,做的動作是執(zhí)行具體的動畫動作。
  5. runPendingAnimations是最終執(zhí)行具體動畫的方法

產(chǎn)生動畫的流程

RecyclerView 的 onLayout 方法主要調(diào)用了 dispatchLayout 方法,dispatchLayout 中保障了 dispatchLayoutStep1、2、3 三個(gè)方法的執(zhí)行。

dispatchLayoutStep1

  1. 首先將當(dāng)前屏幕中的 items 信息保存;(生成 ItemHolderInfo 賦值給 InfoRecord 的 preInfo 并且對其 flags 添加 FLAG_PRE ,再將 InfoRecord 添加到 ViewInfoStore 的 mLayoutHolderMap 中
  2. 進(jìn)行預(yù)布局;(調(diào)用 LayoutManager 的 onLayoutChildren)
  3. 預(yù)布局完成后和第 1 步中保存的信息對比,將新出現(xiàn)的 item 信息保存;(和第 1 步中不同的是 flags 設(shè)置的是 FLAG_APPEAR)

dispatchLayoutStep2

  1. 將預(yù)布局 boolean 值改為 flase;
  2. 進(jìn)行真正布局;(調(diào)用 LayoutManager 的 onLayoutChildren)

dispatchLayoutStep3

  1. 將真正布局后屏幕上的 items 信息保存;(與 dispatchLayoutStep1 不同的是賦值給 InfoRecord 的 postInfo 并且 flags 添加 FLAG_POST)
  2. 執(zhí)行動畫,調(diào)用 ViewInfoStore.process();
  3. 布局完成回調(diào),onLayoutCompleted;

仿照 DefaultItemAnimator 搭建據(jù)圖框架Base框架

public class BaseItemAnimator extends SimpleItemAnimator {
    //業(yè)務(wù)控制是否執(zhí)行該viewHolder的動畫  比如通訊錄列表,判斷只有聯(lián)
    //系人的ViewHolder執(zhí)行動畫,如果是分組頭部ViewHolder則不執(zhí)行動畫
    @Override
    public boolean animateRemove(RecyclerView.ViewHolder holder) {
        // 計(jì)算 holder的動畫參數(shù) 如:x偏移量 y軸偏移量 透明度等等
        // 保存 viewHolder 以及 動畫參數(shù)
        //  業(yè)務(wù)控制是否執(zhí)行該viewHolder的動畫  
        //      比如通訊錄列表,判斷只有聯(lián)系人的ViewHolder執(zhí)行動畫,
        //      如果是分組頭部ViewHolder則不執(zhí)行動畫
        return false;
    }

    @Override
    public boolean animateAdd(RecyclerView.ViewHolder holder) {
        // 計(jì)算 holder的動畫參數(shù) 如:x偏移量 y軸偏移量 透明度等等
        // 保存 viewHolder 以及 動畫參數(shù)
        //  業(yè)務(wù)控制是否執(zhí)行該viewHolder的動畫  
        return false;
    }


    //用于控制添加,移動更新時(shí),其它Item的動畫執(zhí)行
    @Override
    public boolean animateMove(RecyclerView.ViewHolder holder, int fromX, int fromY, int toX, int toY) {
        // 計(jì)算 holder的動畫參數(shù) 如:x偏移量 y軸偏移量 透明度等等
        // 保存 viewHolder 以及 動畫參數(shù)
        //  業(yè)務(wù)控制是否執(zhí)行該viewHolder的動畫  
        return false;
    }

    //Item更新回調(diào)
    @Override
    public boolean animateChange(RecyclerView.ViewHolder oldHolder, RecyclerView.ViewHolder newHolder, int fromLeft, int fromTop, int toLeft, int toTop) {
        // 計(jì)算 holder的動畫參數(shù) 如:x偏移量 y軸偏移量 透明度等等
        // 保存 viewHolder 以及 動畫參數(shù)
        //  業(yè)務(wù)控制是否執(zhí)行該viewHolder的動畫  
        return false;
    }

    //真正控制執(zhí)行動畫的地方
    //關(guān)鍵方法,參考DafaultItemAnimator的執(zhí)行,在具體的子方法下面去修改和重載
    @Override
    public void runPendingAnimations() {
            // 根據(jù)保存的 viewHolder 以及 animInfo   執(zhí)行動畫
    }
	...
}

給 RecyclerView 設(shè)置動畫調(diào)用 setItemAnimator 方法,將自定義的Animator設(shè)置給RecyclerView即可。

參考文章:

https://juejin.cn/post/7169857225949708301
https://www.jianshu.com/p/7171ea362513

源碼:

MultiTypeAdapter文章來源地址http://www.zghlxwxcb.cn/news/detail-503281.html

到了這里,關(guān)于[Android]自定義RecyclerView中View的動畫的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Android View動畫之LayoutAnimation的使用

    Android View動畫之LayoutAnimation的使用

    接前篇 Android View動畫整理 ,本篇介紹 LayoutAnimation 的使用。 參考《安卓開發(fā)藝術(shù)探索》。 View 動畫作用于 View 。 LayoutAnimation 則作用于 ViewGroup , 為 ViewGoup 指定一個(gè)動畫,ViewGoup 的子 View 出場時(shí)就具體動畫效果。 簡言之,LayoutAnimation 是為 ViewGroup 的子View指定出場動畫。 開

    2024年02月11日
    瀏覽(21)
  • Android View的動畫效果,上移展示和下移隱藏

    Android View的動畫效果,上移展示和下移隱藏

    原文:Android View的動畫效果,上移展示和下移隱藏-Stars-One的雜貨小窩 項(xiàng)目里的一個(gè)小需求(實(shí)際是要和手勢操作一起,上滑和下拉觸發(fā)此動畫效果),記錄一下 PS: 本篇先記錄下動畫效果,下篇再將如何監(jiān)聽滑動手勢 實(shí)際通過View的translationY的屬性來實(shí)現(xiàn) PS: withEndAction 方法實(shí)際也是設(shè)

    2024年03月22日
    瀏覽(32)
  • Android Text View 去掉默認(rèn)的padding的實(shí)現(xiàn)方法

    Android Text View 去掉默認(rèn)的padding的實(shí)現(xiàn)方法

    先看下最終實(shí)現(xiàn)效果,滿意您在往下看: TextView 繪制的時(shí)候自帶一定的Padding值,要想實(shí)現(xiàn)去掉默認(rèn)的padding值,xml文件可以設(shè)置一個(gè)屬性值 : 然后運(yùn)行起來就會發(fā)現(xiàn),并沒有什么卵用,也不能說完全沒有,但效果差點(diǎn)意思。我就不運(yùn)行了,在編譯器上也能大概看到效果,如

    2024年01月19日
    瀏覽(26)
  • android 自定義圓角View

    public?class?CustomView?extends?View?{ ????private?float?cornerRadius; ????public?CustomView(Context?context)?{ ????????super(context); ????????init(); ????} ????public?CustomView(Context?context,?AttributeSet?attrs)?{ ????????super(context,?attrs); ????????TypedArray?typedArray?=?context.obt

    2024年02月11日
    瀏覽(26)
  • Android自定義View流程

    在開發(fā)中,View視圖具有非常重要的作用,它是直接呈現(xiàn)給使用者的,因此向用戶展示精美高效的View視圖很有意義。Android系統(tǒng)提供了豐富的視圖組件,如TextView、ImageView、Button等,還提供了RelativeLayout、LinearLayout、FrameLayout等組合組件,使用這些組件搭配能實(shí)現(xiàn)良好的視圖效果

    2024年04月11日
    瀏覽(17)
  • android開發(fā)之Android 自定義滑動解鎖View

    android開發(fā)之Android 自定義滑動解鎖View

    自定義滑動解鎖View 需求如下: 近期需要做一個(gè)類似屏幕滑動解鎖的功能,右劃開始,左劃暫停。 需求效果圖如下 實(shí)現(xiàn)效果展示 自定義view如下 /** Desc 自定義滑動解鎖View Author ZY Mail sunnyfor98@gmail.com Date 2021/5/17 11:52 */ @SuppressLint(“ClickableViewAccessibility”) class SlideSwitchButton :

    2024年02月13日
    瀏覽(21)
  • Android 自定義View 之 圓環(huán)進(jìn)度條

    Android 自定義View 之 圓環(huán)進(jìn)度條

    ??很多時(shí)候我們會使用進(jìn)度條,而Android默認(rèn)的進(jìn)度條是長條的,從左至右。而在日常開發(fā)中,有時(shí)候UI為了讓頁面更美觀,就需要用到圓環(huán)進(jìn)度條,那么本文就是通過自定義寫一個(gè)圓環(huán)進(jìn)度條,首先看一下效果圖: ??關(guān)于自定義View的基礎(chǔ)知識就不再做過多的講解了,我

    2024年02月10日
    瀏覽(18)
  • Android:繪制自定義View人臉識別框

    Android:繪制自定義View人臉識別框

    項(xiàng)目開發(fā)需要自定義View實(shí)現(xiàn)一個(gè)人臉框,代碼實(shí)現(xiàn)很平常,一些細(xì)節(jié)記錄一下,方便以后查閱。 代碼實(shí)現(xiàn): FaceView.java 注意: 這里我把FaceView的layout_width、layout_height都設(shè)置成了\\\"match_parent\\\" 這里面有個(gè) 坑 容易踩到 本次開發(fā)時(shí),xml中FaceView控件往上一直到第一層父布局寬、高

    2024年02月09日
    瀏覽(21)
  • Android 自定義View 之 Dialog彈窗

    Android 自定義View 之 Dialog彈窗

    ??在日常開發(fā)中用到彈窗是比較多的,常用于提示作用,比如錯(cuò)誤操作提示,余額不足提示,退出登錄提示等,還有用于數(shù)據(jù)展示的彈窗,上拉彈窗等等,主要為了簡化在日常開發(fā)中的使用。 ??Android中的Dialog彈窗是一種用于展示特定信息或者在用戶需要進(jìn)行某些操作時(shí)

    2024年02月16日
    瀏覽(23)
  • Android 自定義View之圓形進(jìn)度條

    Android 自定義View之圓形進(jìn)度條

    很多場景下都用到這種進(jìn)度條,有的還帶動畫效果, 今天我也來寫一個(gè)。 寫之前先拆解下它的組成: 底層圓形 上層弧形 中間文字 那我們要做的就是: 繪制底層圓形; 在同位置繪制上層弧形,但顏色不同; 在中心點(diǎn)繪制文本,顯示進(jìn)度。 按照這個(gè)目標(biāo),學(xué)習(xí)下自定義Vi

    2024年02月09日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包