做安卓开发的朋友们,不知道你们会不会经常用遇到这样的情景,某个做所畏的产品设计的sb,拿着iphone来看给你看,说看苹果的这个效果多好,看那个效果多好。苹果也比安卓清晰多了,你能不能也把咱们的安卓应用也做成这种效果的。那样的用户体验更好,更cool一些。不知你们有没有遇到过这样半吊子的sb设计,反正我是遇到了。所以本文由此而生。
进入正题:首先你要实现弹性效果的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;
}
}
}
转载自:http://www.cnblogs.com/vus520/archive/2012/06/06/2561988.html
|