本人纯菜鸟 因项目所需需要横向的listview 然后可以右拉加载下一页的数据,在网上找了3天,就http://blog.csdn.net/yanzi1225627/article/details/21294553#reply,这个给了不少启发,感谢大神的贡献。
DisplayMetrics metric = new DisplayMetrics();
((Activity) context).getWindowManager().getDefaultDisplay()
.getMetrics(metric);
int width_phone = metric.widthPixels; // 获取到屏幕宽度(像素)
int wid = Tool.px2dip(context, Integer.valueOf(width_phone));//将px 转化为dp来使用
RelativeLayout.LayoutParams laypar1 = (android.widget.RelativeLayout.LayoutParams)
attendac_mangag_horizon_listlayout.getLayoutParams();//获取HorizontalListView外部的RelativeLayout 因为有可能不会整除,就动态增加距离左边的长度
int yu = (wid - 82) % 7;
laypar1.leftMargin = Tool.dip2px(context, (50 + yu));//视图中设置的初始距离左边长度为50dp 再加上余数就可以保证HorizontalListView的长度可以被7整除,这一点蛮重要的,不然可能会导致移动的位置过少或者过多的情况
attendac_mangag_horizon_listlayout.setLayoutParams(laypar1);
pian = ((wid - 82) / 7);//获取到了每一个item的宽度
int widd = pian - 20;//为什么要剪掉20呢 因为原先设置的 柱状图的宽度为20dp 所以剪掉了 后边有使用到 具体看代码
horizon_listview.scrollTo(Tool.dip2px(context, pian * 25));//设置了移动的长度
//监听一下移动的位置咯 不加延时 会挂掉也不知道是为什么 知道的同学请告知下
horizon_listview.setOnScrollStateChangedListener(new OnScrollStateChangedListener() {
@Override
public void onScrollStateChanged(ScrollState scrollState) {
// TODO Auto-generated method stub
if (horizon_listview.getFirstVisiblePosition() == 1) {
if (!cc) {
Handler handler11 = new Handler();
handler11.postDelayed(new Runnable() {
@Override
public void run() {
// setHideAnimation(login_linear_img,
// 0);
horizon_listview.scrollTo(Tool.dip2px(
context, pian * 2));//控制一下位置 看代码就知道为什么是要移动2个宽度啦
}
}, 300);
}
} else if (horizon_listview.getFirstVisiblePosition() == 0) {
// Toast.makeText(context, "加载中请稍后···",
// Toast.LENGTH_SHORT).show();
if (!cc) {
Handler handler11 = new Handler();
handler11.postDelayed(new Runnable() {
@Override
public void run() {
// setHideAnimation(login_linear_img,
// 0);
horizon_listview.scrollTo(Tool.dip2px(
context, pian * 1));
}
}, 300);
}
} else {
cc = false;
}
}
});
首先在mainactivity中进行监听 点击事件啦
// horizon_listview.setSelection(23);
horizon_listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
adpter.setSelectpostion(position);
}
});
点击事件的方法,代码也懒得在里边写什么注释了 ,找妹子去打lol 了 ,大家下代码看看 应该也能看懂
public void setSelectpostion(int position) {
// Log.i("ssss", "position= " + position);
// Log.i("ssss", "selectIndex= " + selectIndex);
// 获取当前view 的id 然后和上一次保存下来的textview 的id做对比 如果不一样则上一个隐藏
TextView test = textsave.get(position);
test.setText("处理中");
// Log.i("ssss", "上一次的textviewsave ="+textviewsave);
if(textviewsave!=null){
if (selectIndex == position) {
} else {
textviewsave.setText("");
}
}
notifyDataSetChanged();
selectIndex = position;
textviewsave = textsave.get(position);
Log.i("ssss", "保存下的textviewsave ="+textviewsave);
}