关于自定义indexbar使用paint画笔实时显示索引listview的header首字母和header对应的列表首个字符

开发联系人模块,遇到自定义view的问题,并且是使用paint画笔去绘制,关于字母索引列表的问题网上有很多基础的教程,但是遇到特殊定制的view和功能,还是需要开发人员自己去想办法解决。


描述一下:就是要在绘制好右侧字母索引的同时,弹框展示字母和字母对应的姓名的姓氏列表:如图

所以,需要我们绘制好弹框,字母部分是paint画笔绘制,下边姓氏列表为listview弹框:

public void draw(Canvas canvas) {

    if (!mDisplay || !mEnabled) {
        return;
    }

    for (int i = 0; i < mAllSections.length; i++) {
        float paddingLeft = (mWidth - mSectionPaint.measureText(mAllSections[i])) / 2;

        float x = mDisplayRect.left + paddingLeft;
        float y;
        int[] positions = new int[2];


        mListView.getLocationInWindow(positions);
        if (mListView.getHeaderViewsCount() == 0 && positions[1] != 321 && positions[1] != 474) {
            y = mDisplayRect.top + (mSectionHeight + 7) * (i + 1);
        } else {
            y = mDisplayRect.top + mSectionHeight * (i + 1) + mSectionPaddingTop;
        }

        if (isDraw && mAllSections[i].equals(mDialog)) {
            mSectionPaint.setColor(mSectionSelectedTextColor);
            canvas.drawText(mAllSections[i], x, y, mSectionPaint);
        } else {
            mSectionPaint.setColor(mSectionDefaultTextColor);
            canvas.drawText(mAllSections[i], x, y, mSectionPaint);
        }
    }

    //根据当前是否需要,绘制关键字索引以及姓名首字列表
    if (isDraw) {
        mNameIndexListHeaderText.setText(mDialog);
    }
    //根据需要,更新姓名首字列表
    updateIndexListView(isDraw);
}

设定好位置之后,再获取列表数据,填充数据,更新数据,即可,具体详情可根据业务来做。整体方案是这个思路。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值