SideBar 选择城市时右侧边上的 选择bar
需要定义一个SideBar的视图类 在布局文件中引用 同时在布局中设置一个textView默认不可见
当触摸时才显示 在调用的Activity中
sideBar.setOnTouchingLetterChangedListener方法
离开时不可见 同时联动listView listView.setSelection(i)设置联动;
package com.archie.lazyhousewifery.cityandauntdetail.makeview; import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView; import com.archie.lazyhousewifery.cityandauntdetail.Constants; public class SideBar extends View { public String[] characters = 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 paint;
private int textSize = 16;
private int defaultTextColor = Color.parseColor("#D2D2D2");
private int selectedTextColor = Color.parseColor("#2DB7E1");
private int touchedBgColor = Color.parseColor("#F5F5F5");
private TextView text_dialog; private OnTouchingLetterChangedListener onTouchingLetterChangedListener; private int position = -1; public SideBar(Context context) {
super(context);
} public SideBar(Context context, AttributeSet attrs) {
super(context, attrs);
init();
} public SideBar(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
} public void setTextDialog(TextView textView){
this.text_dialog = textView;
} private void init() {
paint = new Paint();
paint.setAntiAlias(true);
} @Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas); int height = getHeight();
int width = getWidth();
int singleHeight = height / characters.length; for (int i = 0; i < characters.length; i++) {
if (i == position) {
paint.setColor(selectedTextColor);
} else {
paint.setColor(defaultTextColor);
}
paint.setTextSize(textSize); float xPos = width / 2 - paint.measureText(characters[i]) / 2;
float yPos = singleHeight * i + singleHeight;
canvas.drawText(characters[i], xPos, yPos, paint);
}
} @Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
float y = event.getY();
position = (int) (y / (getHeight() / characters.length));
if (position >= 0 && position < Constants.CITY_TYPE.length) {
onTouchingLetterChangedListener.onTouchingLetterChanged(position);
switch (action) {
case MotionEvent.ACTION_UP:
setBackgroundColor(Color.TRANSPARENT);
position = -1;
invalidate();
if (text_dialog != null) {
text_dialog.setVisibility(View.INVISIBLE);
}
break;
default:
setBackgroundColor(touchedBgColor);
invalidate();
text_dialog.setText(characters[position]);
break;
}
}else{ setBackgroundColor(Color.TRANSPARENT);
if (text_dialog != null) {
text_dialog.setVisibility(View.INVISIBLE);
} }
return true;
} public void setOnTouchingLetterChangedListener(
OnTouchingLetterChangedListener onTouchingLetterChangedListener) {
this.onTouchingLetterChangedListener = onTouchingLetterChangedListener;
} public interface OnTouchingLetterChangedListener {
public void onTouchingLetterChanged(int position);
} }
SideBar
private void initSideBar() { sideBar.setTextDialog(dialog_text);
sideBar.setOnTouchingLetterChangedListener(new SideBar.OnTouchingLetterChangedListener() { @Override
public void onTouchingLetterChanged(int position) {
String city_label = Constants.CITY_TYPE[position];
for (int i = 0; i < cityList.size(); i++) {
if (cityList.get(i).getCityName().equals(city_label)) { cityListView.setSelection(i);
dialog_text.setVisibility(View.VISIBLE);
break;
}
if(i == cityList.size() -1){ dialog_text.setVisibility(View.INVISIBLE); }
}
}
}); }
上边的代码是在activity中引用sideBar 回调的方法 其他的稍作处理就可以运行了
SideBar 选择城市时右侧边上的 选择bar的更多相关文章
- 美团HD(5)-选择城市
DJSelectCityViewController.m #import "DJSelectCityViewController.h" #import "DJConsta ...
- h5手机端下拉选择城市
<!doctype html><html> <head> <meta http-equiv="Content-Type& ...
- XML:使用DOM技术解析xML文件中的城市,实现select级联选择
中国的城市xml格式:cities.xml <?xml version="1.0" encoding="utf-8"?> <china> ...
- jquery实现输入框聚焦,键盘上下键选择城市
在最近有个项目中 需要实现当文本框聚焦的时候,可以键盘上下键选择内容,按enter键的时候,把内容传到输入框中,如图所示: 实现代码如下: /** *输入框聚焦,键盘上下键选择城市 */ ;(func ...
- [WP8] Binding时,依照DataType选择DataTemplate
[WP8] Binding时,依照DataType选择DataTemplate 范例下载 范例程序代码:点此下载 问题情景 在开发WPF.WP8...这类应用程序的时候,透过Binding机制搭配Da ...
- ecshop添加商品选择品牌时如何按拼音排序
ECSHOP后台添加新商品时,有一个选择品牌的下拉框,如果品牌太多,在下拉框里查找起来很不方便. 我想给“下拉框里的品牌列表”按品牌名的拼音排序,比如有“中国水利出版社” “中国人民出版社” 这两个品 ...
- 每天一个JavaScript实例-动态省份选择城市
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- Swift基础之实现选择图片时,出现类似于ActionSheet的样式
之前看到过有APP在选择图片时,调用手机相册时,将手机相册做成了左右滑动选择的效果,这次展示的就是这种样式,用OC语言已经有人实现过类似的代码,在这里写的仅仅是效果展示的代码调用,具体代码,可以自己研 ...
- jQuery 选择城市,显示对应的即时时区时间
因客户需要,我们CRM系统中,jQuery 弄个时区插件 如图: HTML: <div id="cityDate"> <i class="P_arrow ...
随机推荐
- spark1.6.1 on yarn搭建部署
注:本文是建立在hadoop已经搭建完成的基础上进行的. Apache Spark是一个分布式计算框架,旨在简化运行于计算机集群上的并行程序的编写.该框架对资源调度,任务的提交.执行和跟踪,节点间的通 ...
- 修改window本地hosts文件,修改域名指向
Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Host ...
- ReactiveX 学习笔记(4)过滤数据流
Filtering Observables 本文主题为过滤 Observable 的操作符. 这里的 Observable 实质上是可观察的数据流. RxJava操作符(三)Filtering Deb ...
- k8s删除一个Node并重新加入集群
k8s删除一个节点使用以下命令 删除一个节点前,先驱赶掉上面的pod kubectl drain 172.17.3.51 --delete-local-data 然后我们来删除节点 kubectl d ...
- Android 深入浅出 - manifest文件的使用
AndroidManifest的作用简单举例 Manifest如何解析的?
- sqlalchemy 学习-- 多表操作
一对多:一对一 # one -- many class Students(Base): __tablename__ = "students" sid = Column(Intege ...
- week05 06绑定滚动条 去抖动
像这种小代码 为了满足某种需求 可以直接上网搜 这些都是JS代码和react无关 我们下拉 就会触发事件从而调用loading more news 那个函数 react要求我们加个key key就是唯 ...
- h5做列表 水平分割
移动端H5各种各样的列表的制作方法(三) by FungLeo 移动端H5各种各样的列表的制作方法(三) by FungLeo 前情回顾 在上一篇博文<移动端各种各样的列表的制作方法(二)> ...
- SSM商城项目(一)
1. 学习计划 1.电商行业的背景. 2.宜立方商城介绍 3.宜立方商城的系统架构 a) 功能介绍 b) 架构讲解 4.工程搭建-后台工程 a) 使用maven搭建工程 b) 使用maven的tomc ...
- 微信小程序---picker
picker 从底部弹起的滚动选择器,现支持五种选择器,通过mode来区分,分别是普通选择器,多列选择器,时间选择器,日期选择器,省市区选择器,默认是普通选择器. wxml: 普通选择器(mode = ...