SideBar 仿微信联系人侧边栏界面搜索Viwe
来源:互联网 发布:淘宝店铺转化率是什么 编辑:程序博客网 时间:2024/05/18 22:44
需要做了一个仿微信侧边烂搜索界面的View,这种简单的控件如果去github上的话,很麻烦,所以就自己写了一个,代码很简单,不多说,上代码
public class SideBar extends View { private String[] mTexts = new String[]{ "#", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" }; private Paint mCommonPaint; private int mChoose = -1; private Paint mChoosePaint; private GestureDetector mGestureDetector; private int mTextHeight; public SideBar(Context context) { super(context); init(); } public SideBar(Context context, @Nullable AttributeSet attrs) { super(context, attrs); init(); } public SideBar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { mCommonPaint = new Paint(); mCommonPaint.setAntiAlias(true); //抗锯齿 mCommonPaint.setTextSize(ScreenUtil.dip2px(10)); mCommonPaint.setColor(Color.parseColor("#888888")); mCommonPaint.setTypeface(Typeface.MONOSPACE); //设置字体 mChoosePaint = new Paint(); mChoosePaint.setAntiAlias(true); mChoosePaint.setTextSize(ScreenUtil.dip2px(10)); mChoosePaint.setColor(Color.parseColor("#333333")); mChoosePaint.setTypeface(Typeface.MONOSPACE); mGestureDetector = new GestureDetector(getContext(), mOnGestureListener); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); for (int i = 0; i < mTexts.length; i++) { String text = mTexts[i]; float x = getMeasuredWidth() / 2 - mCommonPaint.measureText(text) / 2; //measureText测量字体大小 if (mChoose == i) { canvas.drawText(text, x, i * mTextHeight + mTextHeight + getPaddingTop(), mChoosePaint); } else { canvas.drawText(text, x, i * mTextHeight + mTextHeight + getPaddingTop(), mCommonPaint); } } } private GestureDetector.SimpleOnGestureListener mOnGestureListener = new GestureDetector.SimpleOnGestureListener() { @Override public boolean onSingleTapUp(MotionEvent e) { int y = (int) e.getY() - getPaddingTop(); mChoose = y / mTextHeight; invalidate(); if (mOnSideChooseListening != null) { mOnSideChooseListening.onChooseListener(mChoose, mTexts[mChoose]); } return super.onSingleTapUp(e); } }; @Override public boolean onTouchEvent(MotionEvent event) { mGestureDetector.onTouchEvent(event); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: setBackgroundColor(Color.parseColor("#88888888")); break; case MotionEvent.ACTION_UP: setBackgroundColor(Color.TRANSPARENT); break; } return true; } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); //需要考虑padding mTextHeight = (getMeasuredHeight() - getPaddingTop() - getPaddingBottom()) / mTexts.length; } public void setTextSize(int size) { mCommonPaint.setTextSize(size); mChoosePaint.setTextSize(size); } public interface OnSideChooseListening { void onChooseListener(int choose, String text); } private OnSideChooseListening mOnSideChooseListening; public void setOnSideChooseListening(OnSideChooseListening onSideChooseListening) { mOnSideChooseListening = onSideChooseListening; }}
阅读全文
0 0
- SideBar 仿微信联系人侧边栏界面搜索Viwe
- 39、微信通讯录联系人快速索引侧边栏SideBar
- Swing SideBar(Swing 侧边栏)
- WordPress增加侧边栏sidebar
- Android控件--侧边栏SideBar
- WordPress增加侧边栏sidebar
- sublime中的侧边栏 (sidebar) 主题问题
- 联系人侧边栏控件
- 简单创建 vista/win7的侧边栏sidebar
- Android ListView侧边字母索引栏SideBar控件的实现
- Sublime text 3更改侧边栏【sidebar】的字体大小
- Chrome侧边栏书签插件 Candy Bookmarks Sidebar
- 如何使WordPress博客添加多个sidebar侧边栏
- 模仿联系人侧边栏字母查询
- SectionIndexer解析与使用 联系人侧边栏
- 在Windows XP下安装Windows Sidebar(侧边栏)-- 英文版
- 在Windows XP下安装Windows Sidebar(侧边栏)-- 中文版
- OSX: Finder的侧边栏(Sidebar)不显示已装载的网络共享
- Linux学习
- Android-五子连珠(三)-自定义的view
- [来源未知]完全平方数
- 1>LINK : fatal error LNK1104: 无法打开文件“GxIAPI.lib”
- Redis知识点详解
- SideBar 仿微信联系人侧边栏界面搜索Viwe
- 进程的调用和进程切换
- LocalStorage存储JSON对象的问题
- mybatis之入门到开发(三)之常用对象SqlSessionFactory和SqlSession,动态sql,输入映射和输出映射
- Ubuntu命令行下MySQL数据导出与导入
- javascript jssdk退出微信的方法
- 关于metasploit下连接postgresql数据库问题
- PHP TP5 省市区表多级关联模型查询,和db方式查询封装效率
- Serializable和Externalizable序列化反序列化