在ListView的右边添加字母列表
在ListView的右边添加字母列表,点击某个字母时,列表就滚动到预期位置。
<!-- 数字和字母栏在标题栏下边并且停靠在右边 -->
<com.txrj.sms.component.QuickAlphaBar
android:id="@+id/fast_scroller"
android:layout_width="22dp"
android:layout_height="fill_parent"
android:layout_alignParentRight="true"
android:layout_below="@+id/title_bar"
android:layout_gravity="top|right|center"
android:layout_marginTop="0dip"
android:background="@null"
android:scaleType="centerInside"
android:src="@drawable/dic_background" />
<!-- 当前滚动到哪个字母那里 -->
<TextView
android:id="@+id/fast_position"
android:layout_width="70dip"
android:layout_height="70dip"
android:layout_centerInParent="true"
android:layout_gravity="center_horizontal|top"
android:layout_margin="34dip"
android:background="@drawable/sort_icon_bg_click"
android:gravity="center"
android:padding="2dip"
android:textColor="#404040"
android:textSize="48dip"
android:visibility="invisible" />
/**
* @ClassName QuickAlphaBar
* @description
* @author Txrj
* @date 2013-7-9 上午10:56:16
*/
public class QuickAlphaBar extends ImageButton {
private String[] letters = 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 mPaint = new Paint();
private int select = 0;
private int singleHeight;
private ListView mListView;
private TextView mAlphsTextView;
private HashMap<String, Integer> alphaIndexer;
private Handler mHandler = new Handler();
public QuickAlphaBar(Context context, AttributeSet attrs) {
super(context, attrs);
}
/* (non-Javadoc)
* @see android.view.View#onTouchEvent(android.view.MotionEvent)
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
int lastSelect = select;
int index = (int) (event.getY() / singleHeight);
if (index >= 0 && index < letters.length) {
String alpha = letters[index];
if (alphaIndexer.containsKey(alpha)) {
int position = alphaIndexer.get(alpha);
if (mListView.getHeaderViewsCount() > 0) {
mListView.setSelectionFromTop(position
+ mListView.getHeaderViewsCount(), 0);
} else {
mListView.setSelectionFromTop(position, 0);
}
mAlphsTextView.setText(letters[index]);
}
}
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
if(lastSelect != index) {
if(index >= 0 && index < letters.length) {
select = index;
invalidate();
}
}
mAlphsTextView.setVisibility(VISIBLE);
break;
case MotionEvent.ACTION_MOVE:
if(lastSelect != index) {
if(index >= 0 && index < letters.length) {
select = index;
invalidate();
}
}
break;
case MotionEvent.ACTION_UP:
select = -1;
mAlphsTextView.setVisibility(INVISIBLE);
break;
}
return super.onTouchEvent(event);
}
/* (non-Javadoc)
* @see android.widget.ImageView#onDraw(android.graphics.Canvas)
*/
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
singleHeight = getHeight() / letters.length;
for(int i=0;i<letters.length;i++){
mPaint.setTextSize(20);
mPaint.setTypeface(Typeface.DEFAULT_BOLD);
mPaint.setAntiAlias(true);
mPaint.setColor(Color.GRAY);
if(i == select) {
mPaint.setColor(Color.parseColor("#00BFFF"));
mPaint.setFakeBoldText(true);
}
float x = getWidth() / 2 - mPaint.measureText(letters[i]) / 2;
float y = singleHeight * (i + 1);
canvas.drawText(letters[i], x, y, mPaint);
mPaint.reset();
}
}
public void setListView(ListView listView) {
mListView = listView;
}
public void setAlphaIndexer(HashMap<String, Integer> alphaIndexer) {
this.alphaIndexer = alphaIndexer;
}
public void setTextView(TextView textView) {
this.mAlphsTextView = textView;
}
}
在ListView的右边添加字母列表的更多相关文章
- 获取subgrid中的数据并修改,含添加刷新列表的事件
var isAddRefresh = false; function setLawsuitQueryResultText() { var queryResultIndex = 7; var gridC ...
- 在 Wiki 标记中添加无序列表
项目:在 Wiki 标记中添加无序列表在编辑一篇维基百科的文章时,你可以创建一个无序列表,即让每个列表项占据一行,并在前面放置一个星号.但是假设你有一个非常大的列表,希望添加前面的星号.你可以在每一行 ...
- Python实践练习:在 Wiki 标记中添加无序列表
题目描述 项目:在 Wiki 标记中添加无序列表 在编辑一篇维基百科的文章时,你可以创建一个无序列表,即让每个列表项占据一行,并在前面放置一个星号.但是假设你有一个非常大的列表,希望添加前面的星号.你 ...
- 项目一:第三天 收派标准添加 收派标准分页查询(基于datagrid实现) 收派标准修改快递员添加 快递员列表查询
1.收派标准添加 n jQuery easyUI window使用 n jQuery easyUI form表单校验 n 收派标准添加页面调整—url params n 服务端实现—三层 2.jQue ...
- WPF: 在ListView中添加Checkbox列表
描述:ListView是WPF中动态绑定工具的数据容器,本文实现了一个在ListView中显示的供用户选择的列表项目,并且控制列表中选择的项目数量,即实现单选. XAML中创建ListView,代码如 ...
- 从零开始编写自己的C#框架(22)——添加普通列表页面
普通列表页面指的是上一章那种有层次感列表以外的正常列表页面,由于上一章已讲解了正常添加页面的相关操作了,所以部分相关的操作本章节就不再罗嗦重复一次了.大家可以试试先用本章内容中的一些简单介绍,自己使用 ...
- 关于SimpleAdapter和ListView结合使用,实现列表视图的笔记
使用ListView需要为其添加适配器: 适配器有两种:1.ArrayAdapter --用于单独文字显示 2.SimpleAdapter --用于文字和图片显示 这里主要记录SimpleAdapt ...
- dedecms讲解-arc.listview.class.php分析,列表页展示
./plus/list.php - 动态展示栏目列表页(也可能是频道封面)arc.listview.class.php 是dedecms的列表页的相关处理类__construct() ...
- Add-VMNetworkAdapterAcl(添加访问控制列表)
Add-VMNetworkAdapterAclCreates an ACL to apply to the traffic through a virtual machine network adap ...
随机推荐
- 音频视频解决方案:GStreamer/ffmpeg/ffdshow/directshow/vfw
音频视频编程相关:GStreamer/ffmpeg/directshow/vfw linux和window下几种流行的音频视频编程框架作一个总结,防止自己迷惘,免于晕头转向. 一.GStreamer ...
- Eclipse设置打印线
在调出Preferences之后,选中Text Editors.先选中Show print margin,在Print margin column框中填入180就可以,然后选择以下的Print mar ...
- Spring3.2.3+Quartz2.2.1 整合配置
步骤: 1.下载相关包 quartz-2.2.1.jar quartz-jobs-2.2.1.jar spring相关jar包 2.编写配置文件静态 <bean id="activat ...
- openshift 添加cron定时任务
一般linux添加cron任务是在/etc/crontab,但是由于openshift的权限木有这么开放,所以如果需要设置定时任务的话,需要在如下的文件夹下添加你的sh文件,因为我需要的是每天运行一次 ...
- 《马上有招儿:PPT商务演示精选20讲(全彩) 》
<马上有招儿:PPT商务演示精选20讲(全彩) > 基本信息 作者:马建强 霍然 出版社:电子工业出版社 ISBN:9787121225123 上架时间:2014-3-11 出版日期 ...
- Rabbit MQ UI 重置 用户名 密码
新增admin用户 rabbitmqctl add_user newadmin s0m3p4ssw0rd rabbitmqctl set_user_tags newadmin administrato ...
- Byedance AI Camp-笔试题目
最小m段和问题:给定n个整数组成的序列,现在要求将序列分割为m段,每段子序列中的数在原序列中连续排列.如何分割才能使这m段子序列的和的最大值达到最小? Input 第一行输入一个整数t,代表有t组测试 ...
- 使用jQuery动态改变图片显示大小
当我们要显示后台传过来若干个尺寸不一的图片时,为了保证图片大小的一致性及比例的协调,需要动态改变图片显示尺寸.通过搜索,我们可以从网上找到实现此 功能的jQuery代码如下.这段代码可以使图片的大小保 ...
- GO语言基础之error
Go错误处理 Go 语言通过内置的错误接口提供了非常简单的错误处理机制. error类型是一个接口类型,这是它的定义: type error interface { Error() string } ...
- 【Other】希腊诸神大全-中英文名称
希腊诸神大全-中英文名称 希腊诸神的名字_百度搜索 希腊诸神_百度百科 希腊神话人物名字大全_极客百科 希腊神话人物名称大全 希腊神话中的人物名称大全 希腊神话即口头或文字上一切有关古希腊人的神. ...