Android通讯录简单实现

本文介绍了如何在Android开发中实现类似通讯录的功能,包括点击字母跳转到相应联系人和展示效果图。涉及到的关键技术包括汉字转拼音的pinyin4j库和nineoldandroids动画效果库。提供了主要的代码文件如QuickIndexBarActivity.java、MyQuickIndexBar.java、MyAdapter.java等,以及必要的布局和数据类。
摘要由CSDN通过智能技术生成

类似于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
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值