本篇文章转自http://blog.csdn.net/finddreams/article/details/44623235,在大神的基础之上加上的挤压动画,上图
在大神的博客中,添加
private void initData() {
// 实例化汉字转拼音类
characterParser = CharacterParser.getInstance();
pinyinComparator = new PinyinComparator();
sideBar.setTextView(dialog);
// 设置右侧触摸监听
sideBar.setOnTouchingLetterChangedListener(new OnTouchingLetterChangedListener() {
@SuppressLint("NewApi")
@Override
public void onTouchingLetterChanged(String s) {
// 该字母首次出现的位置
if (adapter != null && s != null) {
int position = adapter.getPositionForSection(s.charAt(0));
if (position != -1) {
sortListView.setSelection(position);
}
}
}
});
sortListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// 这里要利用adapter.getItem(position)来获取当前position所对应的对象
// Toast.makeText(getApplication(),
// ((SortModel)adapter.getItem(position)).getName(),
// Toast.LENGTH_SHORT).show();
String number = callRecords.get(((SortModel) adapter
.getItem(position)).getName());
Toast.makeText(MainActivity.this, number, 0).show();
}
});
sortListView.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
int totalItemCount) {
// 当用户滚动的时候,判断是否需要出现挤压动画
if (adapter != null) {
int nextSecPosition = adapter.getSectionForPosition(firstVisibleItem+1);
nextSecPosition = adapter.getPositionForSection(nextSecPosition);
if (firstVisibleItem != lastFirstVisibleItem) {
MarginLayoutParams params = (MarginLayoutParams) titleLayout
.getLayoutParams();
params.topMargin = 0;
titleLayout.setLayoutParams(params);
title.setText(SourceDateList.get(firstVisibleItem).getSortLetters());
}
if (nextSecPosition == (firstVisibleItem + 1)) {
View childView = view.getChildAt(0);
if (childView != null) {
int titleHeight = titleLayout.getHeight();//50
int bottom = childView.getBottom();
MarginLayoutParams params = (MarginLayoutParams) titleLayout
.getLayoutParams();
if (bottom < titleHeight) {
float pushedDistance = bottom - titleHeight;
params.topMargin = (int) pushedDistance;
titleLayout.setLayoutParams(params);
} else {
if (params.topMargin != 0) {
params.topMargin = 0;
titleLayout.setLayoutParams(params);
}
}
}
}
lastFirstVisibleItem = firstVisibleItem;
}
}
});
new ConstactAsyncTask().execute(0);
}
添加一个setOnScrollListener事件,然后再
/**
* 根据输入框中的值来过滤数据并更新ListView
*
* @param filterStr
*/
private void filterData(String filterStr) {
List<SortModel> filterDateList = new ArrayList<SortModel>();
if (TextUtils.isEmpty(filterStr)) {
filterDateList = SourceDateList;
} else {
filterDateList.clear();
for (SortModel sortModel : SourceDateList) {
String name = sortModel.getName();
if (name.indexOf(filterStr.toString()) != -1
|| characterParser.getSelling(name).startsWith(
filterStr.toString())) {
filterDateList.add(sortModel);
}
}
}
// 根据a-z进行排序
Collections.sort(filterDateList, pinyinComparator);
adapter.updateListView(filterDateList);
//这里还需要更新排头首字母
if(filterDateList != null && !filterDateList.isEmpty()){
title.setText(filterDateList.get(0).getSortLetters());
}else{
title.setText("");
}
}
这样就加上了挤压动画,和搜索的时候标题变成对应的首字母标题,记录一下!!!
源码下载地址:http://download.csdn.net/detail/u010648159/9416882