ListView彈性下拉效果

2021-07-09 02:13:57 字數 1875 閱讀 9571

效果圖:

用什麼實現的?

通過屬性動畫和事件分發機制實現的。

只分析實現原理和關鍵**:

1.自定義乙個view繼承listview

public

class

pullseparatelistview

extends

listview

2.複寫listview的dispatchtouchevent方法

// 核心**

@override

public

boolean

dispatchtouchevent(motionevent ev)

break;

case motionevent.action_move:

// 記錄到達頂部或底部時手指的位置

if (!separate)

deltay = currenty - starty;

// 到達頂部

if (reachtop)

return

false;

}// 到達底部

if (reachbottom)

return

false;

}prey = currenty;

break;

case motionevent.action_cancel:

case motionevent.action_up:

prey = 0;

recoverdownview();

if (separate)

}break;

}return

super.dispatchtouchevent(ev);

}

3.在dispatchtouchevent的motionevent.action_move事件中檢測有沒有滑動到最頂部和最底部,如果滑動到最底部則執行上拉的彈性效果。如果滑動到最頂部則實現下拉的彈性效果。

case motionevent.action_move:

// 記錄到達頂部或底部時手指的位置

if (!separate)

deltay = currenty - starty;

// 到達頂部

if (reachtop)

return

false;

}// 到達底部

if (reachbottom)

return

false;

}prey = currenty;

break;

4.彈性效果的實現,for迴圈遍歷每乙個item,根據每個item的索引(position),計算每乙個item在y方向上的偏移量,在每個item的y方向執行屬性動畫。

for (int

index = 0; index

< getchildcount(); index++)

}float distance = multiple * deltay * factor;

child.settranslationy(distance);

}

5.鬆開手指,恢復到原來的狀態,實現原理:遍歷每乙個item實現,將每乙個y方向上的偏移量(offsety)置為0,通過屬性動畫將狀態復原。

/**

* 恢復

*/private

void

recoverseparate()

}

自定義ListView下拉彈起效果

在實現listview下拉彈起效果,最重要的是如何監聽到listview的底部及頂部,abstractlistview 的trackmotionscroll int,int 方法中,分析出listview是如何判斷滑動到底部及頂部的方法。private boolean isheader int de...

ListView下拉重新整理

以後會經常用到下拉重新整理和上拉重新整理的,今天用了,就記錄一下,方便以後的使用。1.導包 2.xml布局 3.activity中 public class mainactivity extends activity implements onrefreshlistener override pub...

具有彈性的ListView

android預設的listview在滾動到頂端或者底端的時候,並沒有很好的提示。android 5.x中,google為這樣的行為只i彈夾了乙個半月型的陰陽效果。自己修改listview也可以實現listview像ios那樣的彈性效果,比如增加headerview或者使用scrollview。這裡...