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

首頁 > 系統 > Android > 正文

Android自定義控件ListView下拉刷新的代碼

2019-10-21 21:32:00
字體:
來源:轉載
供稿:網友

ListView在實際實用中,一般都會有下新刷新和上拉加載的動態效果,今天要學的就是如何自定義帶下拉刷新的ListView。

原理解析:一般將有下拉刷新的listview分成四種不同的狀態來進行不同的顯示效果。

  • 1.完成狀態done:listview正常顯示狀態
  • 2.下拉狀態pull:listview正在下拉時的狀態
  • 3.釋放狀態release:listview下拉后松開的狀態
  • 4.更新狀態refreshing:listview下拉后加載數據時的狀態

實現步驟:

  • 自定義CustomListView繼承自ListView,添加headerView,里面的布局是有下拉刷新的文字與圖片
  • 為listview創建適配器,隨便弄一些數據做一些數據源放入到listview的適配器中,好測試顯示。
  • 自定義的帶有頭部的ListView首先要將頭部視圖隱藏掉,添加頭視圖的代碼是listview.addHeaderView()。
  • 注意:這里并不能用headerView對象的setVisibility()來實現隱藏的效果,當你調用這個添加頭部視圖的方法時,頭部位置不管有沒有視圖都會占據一個位置。所以得用setPadding()的TOP為負數來實現這個功能。
  • 具體代碼實現
package com.hapzhu.customlv;import android.content.Context;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;import android.widget.ImageView;import android.widget.ListView;import android.widget.ProgressBar;import android.widget.TextView;public class CustomListview extends ListView {  View headerView;  int height;  private TextView tvActionTip;  private ImageView ivArrow;  private ProgressBar pbRefreshing;  final static int STATE_DONE = 1;  final static int STATE_PULL = 2;  final static int STATE_RELEASE = 3;  final static int STATE_REFRESHING = 4;  int currentState;  int downY;  public CustomListview(Context context, AttributeSet attrs) {    super(context, attrs);    headerView = View.inflate(context, R.layout.listview_header, null);    this.addHeaderView(headerView);    // 用setPadding方法設置Top的大小來把headerview隱藏掉    // 不能用GetHeight方法來實現,因為這個方法只能用來測試可見的控件    // 要用measureHeight的方法來實現測試,這個方法要先測試0,0的位置    headerView.measure(0, 0);    height = headerView.getMeasuredHeight();    headerView.setPadding(0, -height, 0, 0);    initView();    // 設置第一個狀態    currentState = STATE_DONE;  }  private void initView() {    tvActionTip = (TextView) headerView.findViewById(R.id.tv_state);    ivArrow = (ImageView) headerView.findViewById(R.id.iv_arrow);    pbRefreshing = (ProgressBar) headerView.findViewById(R.id.progressBar);  }  boolean isRefresh = false;  @Override  public boolean onTouchEvent(MotionEvent ev) {    try {      // 事件類型      int action = ev.getAction();      switch (action) {      case MotionEvent.ACTION_DOWN:// 往下滑的手勢        if (currentState == STATE_DONE) {// 只有在完成狀態時才會有業務動作          // 觸發下拉手勢的Y坐標          downY = (int) ev.getY();          // 切換狀態          currentState = STATE_PULL;        }        break;      case MotionEvent.ACTION_MOVE:// 正在拖動的手勢        if (currentState == STATE_PULL) {// 只有在下拉狀態時才會有動作          int currentY = (int) ev.getY();// 得到正在不斷改變的當前Y坐標          int top = currentY - downY - height;// 這個值是下拉時頭部視圖的高度顯示,要慢慢變化          headerView.setPadding(0, top, 0, 0);          if (currentY - downY > height) {// 如果下拉的高度超過了頭視圖的高度,則改變狀態            currentState = STATE_RELEASE;            tvActionTip.setText("松開刷新");          }        }        break;      case MotionEvent.ACTION_UP:        if (currentState == STATE_RELEASE) {// 只有在釋放狀態時才進行刷新動作          tvActionTip.setText("刷新中");// 改變文字 提示          currentState = STATE_REFRESHING;// 改變狀態,變為刷新狀態          ivArrow.setVisibility(GONE);// 箭頭隱藏          pbRefreshing.setVisibility(VISIBLE);// 進度條顯示          isRefresh = true;          if(onRefreshListener!=null){            //如果回調接口不為空,則進行更新的事務            onRefreshListener.OnRefresh(this);          }        } else {          if (!isRefresh) {            // 如果當前的下拉距離小于高度時,再把頭部視圖隱藏            headerView.setPadding(0, -height, 0, 0);            // 一定要記得把狀態改回去,不然會沒法再次向下拉            currentState = STATE_DONE;          }        }        break;      }    } catch (Exception e) {    }    return super.onTouchEvent(ev);  }  // 1定義接口  interface OnRefreshListener {    // 在主程序中使用框架中的Custom來改變數據更新完之后的界面    public void OnRefresh(CustomListview customLv);  }  // 2.申明接口  OnRefreshListener onRefreshListener;  // 3.傳遞接口  public void setOnRefreshListener(OnRefreshListener onRefreshListener) {    this.onRefreshListener = onRefreshListener;  }  public void refreshComplete(){    isRefresh=false;    //更新數據結果后,再回調這個方法    headerView.setPadding(0, -height, 0, 0);    // 一定要記得把狀態改回去,不然會沒法再次向下拉    currentState = STATE_DONE;    //將進度條設為不可見,將箭頭設為可見,將文字改回去    ivArrow.setVisibility(VISIBLE);// 箭頭顯示    pbRefreshing.setVisibility(GONE);// 進度條隱去    tvActionTip.setText("下拉刷新");// 改變文字 提示  }}

今天新學了UML圖,于是就將這個狀態圖畫出來了。

Android,ListView,下拉刷新,代碼

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美黄色性视频| 欧美放荡办公室videos4k| 91色在线观看| 亚洲国产成人精品女人久久久| 成人写真视频福利网| 欧美午夜xxx| 欧美日韩黄色大片| 国产欧美日韩亚洲精品| 欧美成人免费视频| www.欧美精品一二三区| 成人黄色大片在线免费观看| 91久久嫩草影院一区二区| 久久精品国产亚洲精品2020| 欧美俄罗斯乱妇| 国产婷婷97碰碰久久人人蜜臀| 亚洲一区二区三区久久| 国产欧美日韩中文字幕在线| 91亚洲va在线va天堂va国| 中文字幕视频一区二区在线有码| 久久久国产影院| 成人在线视频福利| 91亚洲国产成人精品性色| 亚洲电影免费观看高清完整版| 亚洲人成电影在线| 国产亚洲欧美日韩一区二区| 国产精品2018| 亚洲视频欧美视频| 2019中文字幕在线免费观看| 91精品国产综合久久香蕉最新版| 国产精品第10页| 欧美理论电影在线播放| www.xxxx欧美| 欧美剧在线观看| 国产精品视频最多的网站| 日韩欧美精品网站| 97超碰蝌蚪网人人做人人爽| 欧美日韩亚洲系列| 久久久之久亚州精品露出| 91免费在线视频网站| 国产精品美女视频网站| 日韩亚洲第一页| 亚洲国产成人久久综合一区| 亚洲国产又黄又爽女人高潮的| zzjj国产精品一区二区| 中文字幕亚洲欧美一区二区三区| 最近日韩中文字幕中文| 亚洲视频精品在线| 日韩电影免费观看中文字幕| 日韩成人av在线| 欧美高清第一页| www.欧美免费| 欧美成人免费全部观看天天性色| 亚洲欧美另类中文字幕| 高清欧美性猛交| 成人免费观看网址| 色哟哟网站入口亚洲精品| 亚洲男人天堂网站| 亚洲mm色国产网站| 亚洲免费视频在线观看| 欧美成在线视频| 国内精品美女av在线播放| 欧美激情国产精品| 992tv成人免费视频| 亚洲美女av在线| 国产精品三级美女白浆呻吟| 亚洲人成在线一二| 亚洲第一综合天堂另类专| 色与欲影视天天看综合网| 奇门遁甲1982国语版免费观看高清| 91网站免费观看| 日本久久久久久久久| 成人h视频在线| 精品久久久一区二区| 欧美激情亚洲国产| 欧美成人免费小视频| 亚洲欧美日韩国产中文专区| 国产精品欧美激情在线播放| 91久久久久久久久| 久久免费精品视频| 国产精品欧美日韩一区二区| 91精品久久久久久久久久久久久| 国产不卡av在线| 91精品国产一区| 亚洲最大成人免费视频| 日韩动漫免费观看电视剧高清| 亚洲性日韩精品一区二区| 亚洲欧美日韩图片| 精品福利一区二区| 国产精国产精品| 欧美国产视频日韩| 久久99亚洲热视| 国模吧一区二区| 久久久精品久久久久| 久久久人成影片一区二区三区| 亚洲午夜女主播在线直播| 亚洲激情视频网站| 国产精品手机播放| 国产精品免费看久久久香蕉| 欧美在线观看www| 亚洲欧美综合v| 日韩欧美aaa| 亚洲成人三级在线| 国产一区二区三区在线看| 91极品女神在线| 51午夜精品视频| 亚洲国产成人精品女人久久久| 精品精品国产国产自在线| 日韩av电影手机在线| 国产精品久久久久久久午夜| 97精品国产97久久久久久春色| 国内精品视频一区| 日韩在线免费视频观看| 国产精品伦子伦免费视频| 国产亚洲精品美女| 亚洲在线视频福利| 日产精品久久久一区二区福利| 亚洲r级在线观看| 97视频在线观看免费高清完整版在线观看| 亚洲欧洲在线视频| 播播国产欧美激情| 国产欧美精品久久久| 亚洲开心激情网| 久热精品视频在线观看| 日韩欧美在线播放| 精品国偷自产在线| 蜜臀久久99精品久久久久久宅男| 国产精品狠色婷| 亚洲国产精品久久久| 精品福利免费观看| 国产精品久久久久久久午夜| 日韩电影大片中文字幕| 91av在线看| 欧美日韩美女在线| 欧美黄色片在线观看| 午夜精品久久久久久久久久久久| 欧美日韩裸体免费视频| 国产精品久久久久久久久久久新郎| 亚洲欧美日韩图片| 欧美激情2020午夜免费观看| 精品亚洲aⅴ在线观看| 原创国产精品91| 68精品久久久久久欧美| 亚洲免费小视频| 91久久在线播放| 综合av色偷偷网| 97超视频免费观看| 日韩在线高清视频| 性色av一区二区三区红粉影视| 91久久精品国产91久久性色| 久久手机精品视频| 亚洲男人第一av网站| 久久综合色影院| www.日韩欧美| 久久99青青精品免费观看| 98精品国产高清在线xxxx天堂| 国产成人一区二区在线| 91av成人在线| 欧美在线视频一区二区| 亚洲国产女人aaa毛片在线| 国外成人在线视频| 伊人久久免费视频| 日韩成人在线视频观看| 高跟丝袜欧美一区| 欧美性猛交xxxx黑人猛交|