HorizontalListView实现setSelection

HorizontalListView为网上广为流传的横向listview,但是里面的setSelection却未实现。。。。。。。

代码关键在onLayout方法里面,这个方法里面有个mNextX,这个字段就是表示要滚动的位置,具体逻辑大家可以去仔细阅读一下。

setSelection方法实现原理就是计算要滚动到的位置,即position*adapter里面的item的width,代码如下:

       @Override
public void setSelection(int position)
{
if (position >= 0)
{
if (null != mAdapter)
{
View item = mAdapter.getView(0, null, null);
int width = getSize(item, 0);
mNextX = width * position;
invalidate();
}
}
}

public void setSelection(int position, boolean fromUser)这个方法是非初始化状态滚动到指定位置

/**
* 获取自定义组件尺寸

* @param view
* @param flag
*            0:width 1:height
* @return
*/
public static int getSize(View view, int flag)
{
int w = View.MeasureSpec.makeMeasureSpec(0,
View.MeasureSpec.UNSPECIFIED);
int h = View.MeasureSpec.makeMeasureSpec(0,
View.MeasureSpec.UNSPECIFIED);
view.measure(w, h);
if (0 == flag)
{
return view.getMeasuredWidth();
} else
{
return view.getMeasuredHeight();
}
}

经过试验,可以滚动到指定位置附近,如果要精确滚动,需要计算item精确的width,大家不妨试一下

http://download.csdn.net/detail/dianqiugg/9637201

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值