先來看一下效果圖:
下面,就亮出關鍵**,自定義的乙個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...