android之listivew實現下拉重新整理

2021-09-30 15:15:15 字數 3656 閱讀 3732

先來看一下效果圖:

下面,就亮出關鍵**,自定義的乙個mylistview:

/**

* 重寫乙個listview,主要是新增乙個下拉事件

* * @author way

* */

public class mylistview extends listview implements onscrolllistener

/*** 第二個構造器

* * @param context

* 上下文物件

* @param attrs

* 屬性

*/public mylistview(context context, attributeset attrs)

/*** 初始化資料

* * @param context

* 上下文物件

*/private void init(context context)

/*** 滑動時被呼叫

*/public void onscroll(abslistview view, int firstvisiableitem,

int visibleitemcount, int totalitemcount)

/*** 滑動狀態改變時被呼叫

*/public void onscrollstatechanged(abslistview view, int scrollstate)

/*** 觸控事件

*/public boolean ontouchevent(motionevent event)

break;

case motionevent.action_up:// 向上

if (state != refreshing && state != loading)

if (state == pull_to_refresh)

if (state == release_to_refresh)

}isrecored = false;

isback = false;

break;

case motionevent.action_move:// 手指移動

int tempy = (int) event.gety();

if (!isrecored && firstitemindex == 0)

if (state != refreshing && isrecored && state != loading)

// 一下子推到頂了

else if (tempy - starty <= 0)

// 往下拉了,或者還沒有上推到螢幕頂部掩蓋head的地步

else

}// 還沒有到達顯示鬆開重新整理的時候,done或者是pull_to_refresh狀態

if (state == pull_to_refresh)

// 上推到頂了

else if (tempy - starty <= 0)

}// done狀態下

if (state == done)

}// 更新headview的size

if (state == pull_to_refresh)

// 更新headview的paddingtop

if (state == release_to_refresh)

}break;

}} return super.ontouchevent(event);

} // 當狀態改變時候,呼叫該方法,以更新介面

private void changeheaderviewbystate() else

log.v(tag, "當前狀態,下拉重新整理");

break;

case refreshing:// 正在重新整理狀態

headview.setpadding(0, 0, 0, 0);// 無內部偏移

progressbar.setvisibility(view.visible);// 進度條可見

arrowimageview.clearanimation();// 先清除動畫

arrowimageview.setvisibility(view.gone);// 再移除箭頭動畫

tipstextview.settext("正在重新整理...");// 提示資訊變成正在重新整理...

lastupdatedtextview.setvisibility(view.visible);// 最後重新整理時間可見

log.v(tag, "當前狀態,正在重新整理...");

break;

case done:// 完成狀態

headview.setpadding(0, -1 * headcontentheight, 0, 0);

progressbar.setvisibility(view.gone);

arrowimageview.clearanimation();

arrowimageview.setimageresource(r.drawable.arrow_down);

tipstextview.settext("下拉重新整理");

lastupdatedtextview.setvisibility(view.visible);

log.v(tag, "當前狀態,done");

break;

} }// 重新整理完成

public void onrefreshcomplete()

/*** 乙個下拉重新整理的監聽介面

* */

public inte***ce onrefreshlistener

// 監聽方法

public void setonrefreshlistener(onrefreshlistener refreshlistener)

// 正在重新整理

private void onrefresh()

} /**

* 此方法是「估計」headview的width以及height

* * @param child

* 傳入進來的headview

*/private void measureview(view child)

int childwidthspec = viewgroup.getchildmeasurespec(0, 0 + 0, p.width);

int lpheight = p.height;

int childheightspec;

if (lpheight > 0) else

child.measure(childwidthspec, childheightspec);

} // listview新增adapter方法

public void setadapter(baseadapter adapter)

}

android之interpolator的用法詳解

acceleratedecelerateinterpolator 在動畫開始與結束的地方速率改變比較慢,在中間的時候加速 accelerateinterpolator 在動畫開始的地方速率改變比較慢,然後開始加速 anticipateinterpolator 開始的時候向後然後向前甩 anticip...

android之interpolator的用法詳解

android interpolator,經常和scorllercompat 配合使用,scrollercompat 是乙個控制滑動的類 interpolator 也可以通過 animation 的 setinterpolator 進行設定 interpolator 被用來修飾動畫效果,定義動畫的變...

Android之BroadReceiver的使用

今天我們來學習一下broadreceiver這個元件。我們首先來粗略地認識一下broadreceiver這個元件。也就是說,如果有誰向這個元件傳送訊息的話,那麼這個訊息就會被接受到。註冊broadreceiver有倆種方法,一種是靜態的註冊。也就是broadreceiver必須在androidman...