android 仿微信通讯录旁边的bar
来源:互联网 发布:codelens数据不可用 编辑:程序博客网 时间:2024/04/27 00:39
import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Paint;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;/** * 仿微信通讯录旁边的bar */public class SideBar extends View { private String[] letters; private OnLetterTouchListener letterTouchListener; public SideBar(Context context) { super(context); } public SideBar(Context context, AttributeSet attrs) { super(context, attrs); } public SideBar(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } /** * 每一项的高度 */ private float itemHeight = -1; private Paint paint; private Bitmap letterBitmap; @Override protected void onDraw(Canvas canvas) { if (letters == null) { return; } if (itemHeight == -1) { itemHeight = getHeight() / letters.length; } if (paint == null) { //初始化画笔 paint = new Paint(); paint.setTextSize(itemHeight - 4); //字体颜色 paint.setColor(getResources().getColor(R.color.white)); paint.setFlags(Paint.ANTI_ALIAS_FLAG); //创建一张包含所有列表的图 Canvas mCanvas = new Canvas(); letterBitmap = Bitmap.createBitmap(getMeasuredWidth(), getMeasuredHeight(), Bitmap.Config.ARGB_8888); mCanvas.setBitmap(letterBitmap); float widthCenter = getMeasuredWidth() / 2.0F; //画字符上图片中 for (int i = 0; i < letters.length; i++) { mCanvas.drawText(letters[i], widthCenter - paint.measureText(letters[i]) / 2, itemHeight * i + itemHeight, paint); } } if (letterBitmap != null) {//图片不为空就画图 canvas.drawBitmap(letterBitmap, 0, 0, paint); } super.onDraw(canvas); } @Override public boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event); if (letterTouchListener == null || letters == null) { return false; } switch (event.getAction()) { case MotionEvent.ACTION_DOWN: case MotionEvent.ACTION_MOVE: LogUtil.v(TAG, "action down or move"); int position = (int) (event.getY() / itemHeight + 1); if (position >= 0 && position < letters.length) { letterTouchListener.onLetterTouch(letters[position], position); } return true; case MotionEvent.ACTION_OUTSIDE: case MotionEvent.ACTION_UP: LogUtil.v(TAG, "action up"); letterTouchListener.onActionUp(); return true; } return false; } /** * 设置显示在边栏上的字母 * @param letters */ public void setShowString(String[] letters) { this.letters = letters; } /** * 设置点击某个字母的时候 * @param listener */ public void setOnLetterTouchListener(OnLetterTouchListener listener) { this.letterTouchListener = listener; } public interface OnLetterTouchListener { /** * 某个字母被按下的时候 * @param letter * @param position */ public void onLetterTouch(String letter, int position); /** * 触控手指离开的时候 */ public void onActionUp(); }}
0 0
- android 仿微信通讯录旁边的bar
- 通讯录的旁边有A-Z
- iOS通讯录旁边的索引表的实现
- android图片点击放大动画,并遮挡旁边的控件
- android 通讯录的实现
- Android的通讯录同步
- Android的status bar分析
- Android的status bar分析
- Android平台的Action Bar
- android action-bar的使用
- android 竖向的progress bar
- android仿微信、华为通讯录
- 旁边的工地开工了
- 别人博客旁边的时钟
- android 平板的action bar、status bar、navigation bar的高度
- 基于android平台的通讯录
- android操作通讯录的联系人
- Android制作的一个通讯录
- Unity相关的平台相关的条件开关
- 关于职业规划,尤其值得我们程序员学习
- 国外程序员整理的 C++ 资源大全
- RS-232总结
- 二叉树后序遍历(非递归)
- android 仿微信通讯录旁边的bar
- 计算机算法设计与分析之棋盘覆盖问题
- 周报 关于G711a+H264封装成MP4(代码是转自http://blog.csdn.net/skdkjzz/article/details/40393891)
- static修饰内部类
- 黑马程序员-C语言常量、变量
- 蓝桥杯备战 -海盗比酒量
- arm-linux-系列工具,ld,ar,as,objcopy
- 【Mysql】Mysql数据库处理Servlet中的汉字传递
- 博士生的女朋友有话要说!