進入正題:首先你要實現彈性效果的view要能確定什麼時候應該出現下拉的效果,什麼時候出現下推的效果。在代碼裏的體現就是你要實現IScrollOverable接口。本文中的例子就拿GridView來做個例子。
無圖無真相:
實現了IScrollOverable接口的GridView:
public class BshSOGridView
extends GridView
implements IScrollOverable { public BshSOGridView(Context
context, AttributeSet attrs, int defStyle) { super (
context, attrs, defStyle ); } public BshSOGridView(Context
context, AttributeSet attrs) { super (
context, attrs ); } public BshSOGridView(Context
context) { super (
context ); } @Override public boolean isScrollOnTop() { return 0 ==
getFirstVisiblePosition() ? true :
false ; }
@Override public boolean isScrollOnBtm() { return (getCount()
- 1 )
== getLastVisiblePosition() ? true :
false ; } } |
調用Activity:
public class BshSOViewActivity
extends Activity
{ BshElasticView
ev;
BshSOGridView gv; GridAdagper
ga = new GridAdagper(); @Override public void onCreate(Bundle
savedInstanceState) { super .onCreate(
savedInstanceState ); setContentView(
R.layout.elastic_grid ); ev
= ( BshElasticView ) findViewById( R.id.ev ); //拉動幅度 ev.setFactor(
2 ); //拉動範圍 ev.setMaxElastic(
0 .9f
); gv
= new BshSOGridView(
this ); gv.setBackgroundColor(
Color.WHITE ); gv.setNumColumns(
4 ); gv.setAdapter(
ga ); ev.setScrollOverable(
gv ); ev.irefresh
= new IRefresh() { @Override public boolean refreshTop() { new Thread(
new Runnable() { @Override public void run() { try { Log.d(
"bsh" ,
"refreshing" ); //在這裏做刷新操作讀數據神馬的。這裏用睡覺代替 Thread.sleep(
3000 ); }
catch (
InterruptedException e ) { e.printStackTrace(); } ev.onRefreshComplete(); } }
).start(); return false ; } @Override public boolean refreshBtm()
{ new Thread(
new Runnable() { @Override public void run() { try { Log.d(
"bsh" ,
"refreshing" ); Thread.sleep(
3000 ); }
catch (
InterruptedException e ) { e.printStackTrace(); } ev.onRefreshComplete(); } }
).start(); return false ; } }; } class GridAdagper
extends BaseAdapter {
@Override <br>
public int getCount() {
<br> return 100 ; } @Override public Object
getItem( int arg0) { return null ; } @Override public long getItemId( int arg0) { return 0 ; } @Override public View
getView( int arg0,
View arg1, ViewGroup arg2) { if (
null ==
arg1 ) { arg1
= new ImageView(
BshSOViewActivity. this ); arg1.setBackgroundResource(
R.drawable.ic_launcher ); } return arg1; } } } |