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,大家不妨试一下