类似于Android中通讯录的实现
开发中难免会遇到类似于通讯录的开发,做出来供大家参考。
实现图
图一为点击右方的字母实现图,链表会到F的那个条目
图二为效果图
具体代码
这里需要导入一个 pinyin4j-2.5.0.jar 包是将汉字转为拼音的jar包和一个 nineoldandroids-2.4.0.jar包这是我的代码中用的一个动画效果
首先主页面
QuickIndexBarActivity.java
package com.example.custom_view;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.Window;
import android.widget.ListView;
import android.widget.TextView;
import com.nineoldandroids.view.ViewHelper;
import com.nineoldandroids.view.ViewPropertyAnimator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class QuickIndexBarActivity extends AppCompatActivity {
private MyQuickIndexBar mQuickIndexBar;
private ListView mLv;
private List<PinYinInfo> list = new ArrayList<PinYinInfo>();
private TextView mTv_window;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_quick_index_bar);
initView();
}
private void initView() {
mLv = findViewById(R.id.lv);
mTv_window = findViewById(R.id.tv_window);
mQuickIndexBar = findViewById(R.id.my_quickIndexbar);
list = getStrList();
Collections.sort(list);
MyAdapter adapter = new MyAdapter(QuickIndexBarActivity.this, list);
mLv.setAdapter(adapter);
mQuickIndexBar.setOnItemtClickListenner(new MyQuickIndexBar.onItemClickListenner() {
@Override
public void getOnImtemPosition(String letter) {
for (int i = 0; i < list.size(); i++) {
String strLetter = list.get(i).getmPinYinName().charAt(0) + "";
if (letter.equalsIgnoreCase(strLetter)) {
mLv.setSelection(i);
break;
}
}
showCurrentTvWindow(letter);
}
});
ViewHelper.setScaleX(mTv_window, 0F);
ViewHelper.setScaleY(mTv_window, 0F);
}
private Handler mHandler = new Handler();
private boolean mFlag;
private void showCurrentTvWindow(String letter) {
if (!mFlag) {
mFlag = true;
ViewPropertyAnimator.animate(mTv_window).setDuration(450).scaleX(1.0F).start();
ViewPropertyAnimator.animate(mTv_window).setDuration(450).scaleY(1.0F).start();
}
mTv_window.setText(letter);
mHandler.removeCallbacksAndMessages(null);
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
mFlag = false;
ViewPropertyAnimator.animate(mTv_window).setDuration(450).scaleX(0.0F).start();
ViewPropertyAnimator.animate(mTv_window).setDuration(450).scaleY(0.0F).start();
}
}, 2000);
}
public List<PinYinInfo> getStrList() {
list.add(new PinYinInfo("北京"));
list.add(new PinYinInfo("深圳"));
list.add(new PinYinInfo("广州"));
list.add(new PinYinInfo("天津"));
list.add(new PinYinInfo("河北"));
l