开发联系人模块,遇到自定义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); }
设定好位置之后,再获取列表数据,填充数据,更新数据,即可,具体详情可根据业务来做。整体方案是这个思路。