亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

關于RecyclerView的下拉刷新,自定義幀動畫,第三方框架PtrFrameLayout使用手冊

2019-11-09 15:14:17
字體:
來源:轉載
供稿:網友

首先放上一張gif圖片

本身使用的是一個網上很出名的開源框架,地址是https://github.com/liaohuqiu/android-Ultra-Pull-To-Refresh,在此聲明,我只是為新手做一個簡單的案例,幫助大家有效,快速的掌握這個框架,自定義下拉刷新動態圖片。

首先是xml文件:

<?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context="yianke.example_06.MainActivity">    <in.srain.cube.views.ptr.PtrFrameLayout        android:id="@+id/main_frame"        android:layout_width="match_parent"        android:layout_height="match_parent">        <!--頭部刷新-->        <FrameLayout            android:layout_width="match_parent"            android:layout_height="wrap_content">            <ImageView                android:id="@+id/main_top_animation"                android:layout_width="60dp"                android:layout_height="60dp"                android:layout_gravity="center"/>        </FrameLayout>        <android.support.v7.widget.RecyclerView            android:id="@+id/main_recycler"            android:layout_width="match_parent"            android:layout_height="match_parent"/>    </in.srain.cube.views.ptr.PtrFrameLayout></LinearLayout> 

其次是java代碼:

import android.graphics.drawable.AnimationDrawable;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.View;import android.widget.ImageView;import com.github.library.BaseRecyclerAdapter;import com.github.library.BaseViewHolder;import java.util.ArrayList;import java.util.List;import butterknife.Bind;import butterknife.ButterKnife;import in.srain.cube.views.ptr.PtrDefaultHandler;import in.srain.cube.views.ptr.PtrFrameLayout;import in.srain.cube.views.ptr.PtrHandler;public class MainActivity extends AppCompatActivity{    @Bind(R.id.main_top_animation)    ImageView mMainTopAnimation;    @Bind(R.id.main_recycler)    RecyclerView mMainRecycler;    @Bind(R.id.main_frame)    PtrFrameLayout mMainFrame;    PRivate LinearLayoutManager mManager;    private AnimationDrawable mAnimation;    private List<String> mList;    private BaseRecyclerAdapter<String> mAdapter;    @Override    protected void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ButterKnife.bind(this);        initViews();    }    private void initViews()    {        initDatas();        mMainRecycler.setLayoutManager(mManager);        mMainRecycler.setAdapter(mAdapter = new BaseRecyclerAdapter<String>(this, mList, R.layout.main_item)        {            @Override            protected void convert(BaseViewHolder helper, String item)            {                helper.setImageResource(R.id.item_img, R.mipmap.ic_launcher);                helper.setText(R.id.item_titles, item);            }        });        //下拉刷新        mMainFrame.setPtrHandler(new PtrHandler()        {            @Override            public boolean checkCanDoRefresh(PtrFrameLayout frame, View content, View header)            {                return PtrDefaultHandler.checkContentCanBePulledDown(frame, content, header);            }            @Override            public void onRefreshBegin(PtrFrameLayout frame)            {                mMainFrame.postDelayed(new Runnable()                {                    @Override                    public void run()                    {                        mMainFrame.refreshComplete();//刷新完畢                        refreshDatas();                    }                }, 2000);            }        });    }    /**     * 初始化數據     */    private void initDatas()    {        mList = new ArrayList<>();        setDatas();        mManager = new LinearLayoutManager(this);        mMainTopAnimation.setImageResource(R.drawable.main_top_animation);        mAnimation = (AnimationDrawable) mMainTopAnimation.getDrawable();    }    /**     * 設置數據     */    private void setDatas()    {        if (mList.size() == 0)        {            for (int i = 1; i < 3; i++)            {                mList.add("...豌豆..." + i);            }        }    }    /**     * 刷新數據     */    private void refreshDatas()    {        int itemCount = mManager.getItemCount();        mList.clear();        if (mList.size() == 0)        {            for (int i = 0; i < itemCount; i++)            {                mList.add("我是刷新后的數據...");            }            mAdapter.notifyDataSetChanged();        }    }}這些都相當的基礎和簡單,其中需要說明的是:BaseRecyclerAdapter這個類,其實就是網上的開源庫,適配adapter的使用,沒什么難度。然后就是動畫的制作了,不明白幀動畫的實現的,可以去網上搜索一下,理解一下。我這里就不bb了。。。

直接上代碼

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"    android:oneshot="false">    <item android:drawable="@drawable/tgp_lol_refreshing_0" android:duration="100"/>    <item android:drawable="@drawable/tgp_lol_refreshing_1" android:duration="100"/>    <item android:drawable="@drawable/tgp_lol_refreshing_2" android:duration="100"/>    <item android:drawable="@drawable/tgp_lol_refreshing_3" android:duration="100"/>    <item android:drawable="@drawable/tgp_lol_refreshing_4" android:duration="100"/>    <item android:drawable="@drawable/tgp_lol_refreshing_5" android:duration="100"/>    <item android:drawable="@drawable/tgp_lol_refreshing_6" android:duration="100"/>    <item android:drawable="@drawable/tgp_lol_refreshing_7" android:duration="100"/>    <item android:drawable="@drawable/tgp_lol_refreshing_8" android:duration="100"/>    <item android:drawable="@drawable/tgp_lol_refreshing_9" android:duration="100"/>    <item android:drawable="@drawable/tgp_lol_refreshing_10" android:duration="100"/>    <item android:drawable="@drawable/tgp_lol_refreshing_11" android:duration="100"/>    <item android:drawable="@drawable/tgp_lol_refreshing_12" android:duration="100"/>    <item android:drawable="@drawable/tgp_lol_refreshing_13" android:duration="100"/>    <item android:drawable="@drawable/tgp_lol_refreshing_14" android:duration="100"/></animation-list>其中需要說明的是:

android:oneshot="false"設置為false:代表動畫執行完一次了,循環執行播放,設置為true,就只執行一次。

需要說明的是下拉刷新的開源庫中的一個接口:

//下拉刷新        mMainFrame.setPtrHandler(new PtrHandler()        {            @Override            public boolean checkCanDoRefresh(PtrFrameLayout frame, View content, View header)            {                return PtrDefaultHandler.checkContentCanBePulledDown(frame, content, header);            }            @Override            public void onRefreshBegin(PtrFrameLayout frame)            {                mMainFrame.postDelayed(new Runnable()                {                    @Override                    public void run()                    {                        mMainFrame.refreshComplete();//刷新完畢                        refreshDatas();                    }                }, 2000);            }        });復寫的第一個方法,是判斷是否可以執行下拉刷新,第二個方法:可以再這個方法中執行刷新操作;大概就這么多。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色综合久久天天综线观看| 亚洲欧洲一区二区三区久久| 欧美一区二区三区精品电影| 欧美性猛交丰臀xxxxx网站| 97超级碰在线看视频免费在线看| 成人乱人伦精品视频在线观看| 91精品国产自产在线| 国产精品日韩欧美| 在线日韩精品视频| www.久久色.com| 国产成人黄色av| 国产精品第10页| 91久久久久久久久久久久久| 亚洲精品综合久久中文字幕| 久久电影一区二区| 欧美激情成人在线视频| 欧美精品在线网站| 亚洲第一区第二区| 91精品国产色综合| 亚洲欧美在线一区二区| 色一情一乱一区二区| 亚洲欧美国产视频| 久久久999国产精品| 538国产精品视频一区二区| 69av视频在线播放| 国产精品美女免费视频| 亚洲a在线观看| 亚洲嫩模很污视频| 国产精品吊钟奶在线| 亚洲精品久久久久中文字幕欢迎你| 亚洲**2019国产| 国产成人精品最新| 97av在线视频免费播放| 91精品国产91久久久久久久久| 91精品国产91久久久久| 亚洲日本中文字幕免费在线不卡| 欧美激情va永久在线播放| 成人免费在线视频网站| 欧美性高潮床叫视频| 亚洲欧美福利视频| 一区二区国产精品视频| 亚洲成人国产精品| 97色在线视频| 久久久久久伊人| 亚洲成人久久久| 欧美成人一区在线| 国产欧美日韩免费看aⅴ视频| 国产一区视频在线播放| 91九色国产社区在线观看| 国产精品色婷婷视频| 日韩欧美在线免费观看| 国产精品一区二区久久| 日韩精品极品毛片系列视频| 久久精品国产91精品亚洲| 亚洲精品福利在线观看| 国产日韩精品在线观看| 亚洲成色www8888| 成人免费网站在线观看| 国产精品久久久久久久av电影| 精品久久久久久久久久久久久久| 国产精品中文久久久久久久| 国产精品久久精品| 91色视频在线观看| 日韩动漫免费观看电视剧高清| 福利视频一区二区| 国产成人精品免高潮费视频| 成人中文字幕在线观看| 亚洲香蕉成人av网站在线观看| 亚洲大胆人体视频| 日韩av在线电影网| 久久久久女教师免费一区| 日韩av电影中文字幕| 亚洲福利在线播放| 国产视频观看一区| 92看片淫黄大片欧美看国产片| 亚洲国产精品成人精品| 亚洲人成网站999久久久综合| 亚洲精品久久久久久久久久久久| 欧美怡红院视频一区二区三区| 亚洲精品一区二区久| 国产精品劲爆视频| 一区二区欧美日韩视频| 正在播放亚洲1区| 精品亚洲一区二区三区| 精品国产老师黑色丝袜高跟鞋| 琪琪第一精品导航| 欧美专区国产专区| 久久成人免费视频| 欧美性生交大片免网| 日韩日本欧美亚洲| 久久影视电视剧免费网站清宫辞电视| 欧美激情国产高清| 欧美高跟鞋交xxxxxhd| 亚洲精品国产精品国自产在线| 日本国产一区二区三区| 一区二区欧美日韩视频| 国产做受高潮69| 久久99精品久久久久久噜噜| 欧美日韩中文字幕综合视频| 亚洲在线免费视频| 欧美夜福利tv在线| 麻豆国产va免费精品高清在线| 国产精品久久婷婷六月丁香| 97人人模人人爽人人喊中文字| 8090理伦午夜在线电影| 欧美激情国内偷拍| 91高潮精品免费porn| 欧美第一页在线| 国产午夜精品视频| 亚洲精品99久久久久中文字幕| 国产精品自拍网| 中文字幕久热精品在线视频| 亚洲天堂免费观看| 97视频网站入口| 成人中文字幕在线观看| 亚洲午夜小视频| 国产亚洲a∨片在线观看| 亚洲色图五月天| 欧美在线影院在线视频| 国产精品久久久久久久av大片| 欧美福利在线观看| 欧美日韩亚洲91| 在线日韩第一页| 久久激情视频免费观看| 欧美一级大胆视频| 综合激情国产一区| 日韩性xxxx爱| 在线看片第一页欧美| 亚洲人成电影在线| 亚洲色图在线观看| 亲子乱一区二区三区电影| 色999日韩欧美国产| 亚洲午夜激情免费视频| 亚洲国产精品va在线| 欧美精品免费播放| 久久噜噜噜精品国产亚洲综合| 亚洲精品不卡在线| 亚洲欧美日本另类| 2021久久精品国产99国产精品| 91精品国产91久久久久久不卡| 久久精品国产精品亚洲| 亚洲成avwww人| 8x海外华人永久免费日韩内陆视频| 日本亚洲欧美三级| 国产欧美日韩最新| 色偷偷亚洲男人天堂| 亚洲精品国产精品国自产在线| 成人欧美一区二区三区在线| 波霸ol色综合久久| 韩国三级日本三级少妇99| 日韩免费在线视频| 亚洲伊人一本大道中文字幕| 欧美激情xxxx| 欧美美女15p| 5566日本婷婷色中文字幕97| 亚洲男人天堂网站| 欧美黄网免费在线观看| 欧美激情国产高清| 亚洲国产毛片完整版| 亚洲精品720p| 51午夜精品视频| 91嫩草在线视频| 97在线视频免费观看| 亚洲丁香婷深爱综合|