MainActivity
public class MainActivity extends AppCompatActivity {
private ListView mListView;
private List<String> list;
private ListViewAdapter adapter;
//当前所显示的条目
private int visibleCount = 0;
//当前所显示条目数一半,也就是所显示的中间位置占几个条目
private int middleCount = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = (ListView) findViewById(R.id.listView);
//添加数据
initData();
adapter = new ListViewAdapter(list, this);
mListView.setAdapter(adapter);
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//改变背景
adapter.changeSelectBackground(position);
if (visibleCount == 0) {
// 得到当前显示条目
visibleCount = parent.getChildCount();
if (visibleCount != list.size()) {
middleCount = visibleCount / 2;
}
}
//如果点击条目高于 此列表的正中 则 列表整体上移
if (position <= (parent.getFirstVisiblePosition() + middleCount)) {
mListView.smoothScrollToPosition(position + 1 - middleCount);
}
//如果点击条目低于 此列表的正中 则 列表整体下移
else {
mListView.smoothScrollToPosition(position - 1 + middleCount);
}
}
});
}
private void initData() {
list = new ArrayList<>();
for (int i = 0; i < 20; i++) {
list.add("商品" + i);
}
}
}
Adapter
public class ListViewAdapter extends BaseAdapter {
private List<String> list;
private Context context;
private int selectId;
public ListViewAdapter(List<String> list, Context context) {
this.list = list;
this.context = context;
}
//改变背景方法
public void changeSelectBackground(int pos){
this.selectId = pos;
notifyDataSetChanged();
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = View.inflate(context, R.layout.item, null);
TextView t = (TextView) convertView.findViewById(R.id.ttt);
t.setText(list.get(position));
/**
* 如果点击的是此条目 则改变背景
*/
if(position == selectId){
t.setTextColor(Color.parseColor("#FFE13F5A"));
convertView.setBackgroundColor(Color.parseColor("#d9d8dd"));
}else {
t.setTextColor(Color.parseColor("#000000"));
convertView.setBackgroundColor(Color.parseColor("#ffffff"));
}
return convertView;
}
}