android listview字母索引,Android ListView右侧的字母索引View

letterList;

private ListletterShow;

private int choose = -1;

private Paint paint = new Paint();

private TextView mTextDialog;

public SideBar(Context context) {

this(context, null);

}

public SideBar(Context context, AttributeSet attrs) {

this(context, attrs, 0);

}

public SideBar(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

init();

}

private void init() {

setBackgroundColor(Color.parseColor("#00000000"));

letterList = Arrays.asList(INDEX_STRING);

letterShow = Arrays.asList(INDEX_SHOW);

}

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

int height = getHeight();// 获取对应高度

int width = getWidth();// 获取对应宽度

int singleHeight = height / letterShow.size();// 获取每一个字母的高度

for (int i = 0; i < letterShow.size(); i++) {

paint.setColor(Color.parseColor("#FFFFFF"));

paint.setTypeface(Typeface.DEFAULT_BOLD);

paint.setAntiAlias(true);

paint.setTextSize(26);

// 选中的状态

if (i == choose) {

paint.setColor(Color.parseColor("#4F41FD"));

paint.setTextSize(28);

paint.setFakeBoldText(true);

}

// x坐标等于中间-字符串宽度的一半.

float xPos = width / 2 - paint.measureText(letterShow.get(i)) / 2;

float yPos = singleHeight * i + singleHeight -2;

canvas.drawText(letterShow.get(i), xPos, yPos, paint);

paint.reset();// 重置画笔

}

}

@Override

public boolean dispatchTouchEvent(MotionEvent event) {

final int action = event.getAction();

final float y = event.getY();// 点击y坐标

final int oldChoose = choose;

final OnTouchingLetterChangedListener listener = onTouchingLetterChangedListener;

final int c = (int) (y / getHeight() * letterShow.size());// 点击y坐标所占总高度的比例*b数组的长度就等于点击b中的个数.

switch (action) {

case MotionEvent.ACTION_UP:

setBackgroundColor(Color.parseColor("#00000000"));

choose = -1;

invalidate();

if (mTextDialog != null) {

mTextDialog.setVisibility(View.GONE);

}

break;

default:

setBackgroundColor(Color.parseColor("#00000000"));

if (oldChoose != c) {

if (c >= 0 && c < letterList.size()) {

String alertText = letterList.get(c);

if (listener != null && !"".equals(alertText)) {

listener.onTouchingLetterChanged(alertText);

}

if (mTextDialog != null && !"".equals(alertText)) {

mTextDialog.setText(alertText);

mTextDialog.setVisibility(View.VISIBLE);

}

choose = c;

invalidate();

}

}

break;

}

return true;

}

public void setIndexText(ArrayListindexStrings) {

this.letterList = indexStrings;

invalidate();

}

/**

* 为SideBar设置显示当前按下的字母的TextView

*

* @param mTextDialog

*/

public void setTextView(TextView mTextDialog) {

this.mTextDialog = mTextDialog;

}

/**

* 向外公开的方法

*

* @param onTouchingLetterChangedListener

*/

public void setOnTouchingLetterChangedListener(OnTouchingLetterChangedListener onTouchingLetterChangedListener) {

this.onTouchingLetterChangedListener = onTouchingLetterChangedListener;

}

/**

* 接口

*/

public interface OnTouchingLetterChangedListener {

void onTouchingLetterChanged(String s);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值