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

来源:互联网 发布:广联达软件客服电话 编辑:程序博客网 时间:2024/06/07 22:55

开发联系人模块,遇到自定义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);}

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

0 0
原创粉丝点击