免费A级毛片无码专区网站-成人国产精品视频一区二区-啊 日出水了 用力乖乖在线-国产黑色丝袜在线观看下-天天操美女夜夜操美女-日韩网站在线观看中文字幕-AV高清hd片XXX国产-亚洲av中文字字幕乱码综合-搬开女人下面使劲插视频

自定義ListView下拉刷新上拉加載更多

  • 自定義ListView下拉刷新上拉加載更多
  • 自定義RecyclerView下拉刷新上拉加載更多
Listview現(xiàn)在用的很少了,基本都是使用Recycleview,但是不得不說Listview具有劃時代的意義,拓展性很強(qiáng),我們可以自己添加下拉刷新,上拉加載更多功能 。他和recycleview不同,他生來具有addHeaderView和addFooterView的功能,這也導(dǎo)致同樣都是列表控件,實現(xiàn)上拉下拉的方式缺截然不同 。
效果圖
自定義ListView下拉刷新上拉加載更多

文章插圖
自定義ListView下拉刷新上拉加載更多

文章插圖
1、創(chuàng)建刷新控件public class MyListview extends ListView {public MyListview(Context context) {this(context,null);}public MyListview(Context context, AttributeSet attrs) {this(context,attrs,0);}public MyListview(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init(context);}public void init(Context context) {}1.1、創(chuàng)建頭部View頭部樣式,我寫的是最簡單的,根據(jù)業(yè)務(wù)需求來定,下拉的時候無非就是幾種
  • 產(chǎn)品logo作為箭頭轉(zhuǎn)動的icon
  • 添加刷新時間
  • 加入其他具有特色的動效

自定義ListView下拉刷新上拉加載更多

文章插圖
<?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="wrap_content"android:orientation="horizontal"android:gravity="center"tools:ignore="MissingDefaultResource"><ProgressBarandroid:layout_width="20dp"android:layout_height="match_parent"style="?android:attr/progressBarStyle"android:layout_marginEnd="10dp"android:indeterminateTint="#E8AD56"/><TextViewandroid:id="@+id/header_text"android:layout_width="wrap_content"android:layout_height="50dp"android:text="我是頭部"android:gravity="center"android:textColor="#E8AD56"/></LinearLayout>樣式寫好后,我們需要添加到我們控件中,addHeaderView就起到作用了
public void init(Context context) {//添加頭部viewHeader = View.inflate(context, R.layout.view_header, null);viewHeader.measure(0, 0);//讓系統(tǒng)自動檢測頭部高度heightHeader = viewHeader.getMeasuredHeight();header_text = viewHeader.findViewById(R.id.header_text);viewHeader.setPadding(0, -heightHeader, 0, 0);this.addHeaderView(viewHeader);}一些控件我定義成全局的是因為下面會用到 。setPadding可以設(shè)置顯示位置,左上右下,上為負(fù)數(shù)就是隱藏在頂部 。我們需要手指下拉去控制他緩慢顯示,就用到了OnTouchListener,我們實現(xiàn)OnTouch方法做一些事件的分發(fā)處理 。
1.2、下拉事件public class MyListview extends ListView implements View.OnTouchListener{@Overridepublic boolean onTouch(View v, MotionEvent event) {return false;}public void init(Context context){setOnTouchListener(this);}}注意:別忘記了setOnTouchListener在init中添加
這時候我們需要對event的down,move,up事件進(jìn)行邏輯處理,當(dāng)手指按在屏幕時會觸發(fā)事件,一個down事件,0~無數(shù)次move事件,一個up事件,這里面著重對move事件做處理,我們記錄一下down事件的Y,因為是上下拉動,沒必要計算X 。然后diffY就是手指滑動的距離,我們需要處理一下這個值,因為值太大,而且值是整數(shù),會讓我們下拉的時候產(chǎn)生錯亂,我們本意是讓其從-100到0緩慢滑出(比如頭部高度是100,從隱藏到顯示就是-100到0),小伙伴都可以試試viewHeader.setPadding(0, diffY, 0, 0);和viewHeader.setPadding(0, paddY, 0, 0);效果是不一樣的,diff/3是讓其有種阻尼的感覺,不然的話會很塊就被拉出來了 。還有事件消費的話一定要return true 。

經(jīng)驗總結(jié)擴(kuò)展閱讀