联系人字母快速搜索

package phonestock.myview;

import phonestock.util.DisplayUtil;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;


public class MyLetterListView extends View {


OnTouchingLetterChangedListener onTouchingLetterChangedListener;
String[] b;
int choose = -1;
Paint paint = new Paint();
boolean showBkg = false;
DisplayUtil util;//单位转换(px转dp)
int singleHeight = 0;
    Context context;
public MyLetterListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.context=context;
util = new DisplayUtil(context);
if (screenHeight == 320
&& screenWidth == 240) {
singleHeight = 12;
} else if (screenHeight < 800) {
singleHeight = 16;
} else if (screenHeight >= 800
&&screenHeight < 960) {
singleHeight = 30;
} else if (screenHeight >= 960) {
singleHeight = 45;
}


}


public MyLetterListView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context=context;
util = new DisplayUtil(context);

if (screenHeight == 320
&&screenWidth == 240) {
singleHeight = 12;
} else if (screenHeight < 800) {
singleHeight = 16;
} else if (screenHeight >= 800
&&screenHeight < 960) {
singleHeight = 30;
} else if (screenHeight >= 960) {
singleHeight = 45;
}


}


public MyLetterListView(Context context) {
super(context);
this.context=context;
util = new DisplayUtil(context);
if (screenHeight == 320
&&screenWidth == 240) {
singleHeight = 12;
} else if (screenHeight < 800) {
singleHeight = 16;
} else if (screenHeight >= 800
&&screenHeight < 960) {
singleHeight = 30;
} else if (screenHeight >= 960) {
singleHeight = 45;
}


}


@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);


if (showBkg) {
// canvas.drawColor(Color.parseColor("#40000000"));
}


// int height = getHeight();
int width = getWidth();
if (b != null && b.length > 0) {
// int singleHeight = 30 /* height / b.length */;
for (int i = 0; i < b.length; i++) {
// paint.setColor(Color.Black);
paint.setColor(Color.parseColor("#000000"));
paint.setTypeface(Typeface.DEFAULT_BOLD);
paint.setAntiAlias(true);
paint.setTextSize(util.dip2pxInt(12));
if (i == choose) {
// paint.setColor(Color.Red);
paint.setColor(Color.parseColor("#3399ff"));
paint.setFakeBoldText(true);
}
float xPos = width / 2 - paint.measureText(b[i]) / 2;
float yPos = singleHeight * i + singleHeight;
canvas.drawText(b[i], xPos, yPos, paint);
paint.reset();
}


}


}


@Override
public boolean dispatchTouchEvent(MotionEvent event) {
final int action = event.getAction();
final float y = event.getY();
final int oldChoose = choose;
final OnTouchingLetterChangedListener listener = onTouchingLetterChangedListener;
final int c = (int) (y / singleHeight /* getHeight() * b.length */);


switch (action) {
case MotionEvent.ACTION_DOWN:
showBkg = true;
if (oldChoose != c && listener != null) {
if (c >= 0 && c < b.length) {
listener.onTouchingLetterChanged(b[c]);
choose = c;
invalidate();
}
}


break;
case MotionEvent.ACTION_MOVE:
if (oldChoose != c && listener != null) {
if (c > 0 && c < b.length) {
listener.onTouchingLetterChanged(b[c]);
choose = c;
invalidate();
}
}
break;
case MotionEvent.ACTION_UP:
showBkg = false;
choose = -1;
invalidate();
break;
}
return true;
}


@Override
public boolean onTouchEvent(MotionEvent event) {
return super.onTouchEvent(event);
}


public void setOnTouchingLetterChangedListener(
OnTouchingLetterChangedListener onTouchingLetterChangedListener) {
this.onTouchingLetterChangedListener = onTouchingLetterChangedListener;
}


public interface OnTouchingLetterChangedListener {
public void onTouchingLetterChanged(String s);
}


public void setArrayOfString(String[] b) {
this.b = b;
}

}




以下为引用

private class LetterListViewListener implements
OnTouchingLetterChangedListener {


@Override
public void onTouchingLetterChanged(final String s) {
if (alphaIndexer.get(s) != null) {
int position = alphaIndexer.get(s);
listView.setSelectedGroup(position);
overlay.setText(sections[position]);//sections[] 要显示的数组
overlay.setVisibility(View.VISIBLE);
handler.removeCallbacks(overlayThread);
// 延迟一秒后执行,让overlay为不可见
handler.postDelayed(overlayThread, 1000);
}
}


}


// 初始化汉语拼音首字母弹出提示框
private void initOverlay() {
LayoutInflater inflater = LayoutInflater.from(this);
overlay = (TextView) inflater.inflate(getElementID(
"xct_lthj_overlay", "layout"), null);
overlay.setVisibility(View.INVISIBLE);
// 字母提示变大


overlay.setTextSize(35.0f);
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_APPLICATION,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
PixelFormat.TRANSLUCENT);
WindowManager windowManager = (WindowManager) this
.getSystemService(Context.WINDOW_SERVICE);
windowManager.addView(overlay, lp);
}


// 设置overlay不可见
private class OverlayThread implements Runnable {


@Override
public void run() {
overlay.setVisibility(View.GONE);
}


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值