Android基于开源项目的WheelView的时间、地址联动选择对话框

一晃离上次写博客差不多都过了半年了,现在工作中用到了一些实用的东西,想和大家分享一下。

现在实现的是一个基于开源项目WheelView的时间、地址联动选择的对话框,先看看效果图,文章末尾有源码下载地址:

选择时间:

选择地点:

因为项目中要实现如图上的效果,无奈WheelView的默认没有,所以就修改了一点其中的代码和风格,就实现了这种效果。

步骤如下:

1、要实现选中字体变大,所以就得得到显示文字的TextView的引用,所以这里在源代码“AbstractWheelTextAdapter”中添加了记录显示文字的TextView的集合、字体的最小显示、最大显示值以及记录当前选中条目的索引:

<span style="white-space:pre"></span>private int currentIndex = 0;private static int maxsize = 24;private static int minsize = 14;private ArrayList<View> arrayList = new ArrayList<View>();构造函数也随之改为了:

<span style="white-space:pre"></span>protected AbstractWheelTextAdapter(Context context, int itemResource) {this(context, itemResource, NO_RESOURCE, 0, maxsize, minsize);}<pre name="code" class="java"><span style="white-space:pre"></span>protected AbstractWheelTextAdapter(Context context, int itemResource, int itemTextResource, int currentIndex,int maxsize, int minsize) {this.context = context;itemResourceId = itemResource;itemTextResourceId = itemTextResource;this.currentIndex = currentIndex;this.maxsize = maxsize;this.minsize = minsize;inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);}

其中currentIndex为初始化时选中字体变大的item的索引。

getView函数改为了:

<span style="white-space:pre"></span>@Overridepublic View getItem(int index, View convertView, ViewGroup parent) {if (index >= 0 && index < getItemsCount()) {if (convertView == null) {convertView = getView(itemResourceId, parent);}TextView textView = getTextView(convertView, itemTextResourceId);if (!arrayList.contains(textView)) { //保存显示文字的TextView的引用,方便在外部调用arrayList.add(textView);}if (textView != null) {CharSequence text = getItemText(index);if (text == null) {text = "";}textView.setText(text);if (index == currentIndex) { //把当前选中item字体改大,,其余的变小textView.setTextSize(maxsize);} else {textView.setTextSize(minsize);}if (itemResourceId == TEXT_VIEW_ITEM_RESOURCE) {configureTextView(textView);}}return convertView;}return null;}这样Adapter就修改完了。

2、样式的修改:

在WheelView中修改渐变颜色,中部为白色,向两边慢慢变暗

/** Top and bottom shadows colors */private static final int[] SHADOWS_COLORS = new int[] { 0xeeffffff, 0xeaffffff, 0x33ffffff };wheel_val.xml文件改为了

<shape xmlns:android=""><gradientandroid:startColor="#22ffffff"android:centerColor="#00ffffff"android:endColor="#22ffffff"android:angle="90" /></shape>

wheel_bg.xml改为了空

<layer-list xmlns:android=""></layer-list>

就实现了图片中的效果,这样对源码的修改就完成了。

3、选择时间对话框的实现,代码如下:

布局:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=""android:id="@+id/ly_myinfo_changebirth"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#00000000"android:gravity="center"android:orientation="vertical" ><LinearLayoutandroid:id="@+id/ly_myinfo_changebirth_child"android:layout_width="300dip"android:layout_height="wrap_content"android:layout_marginLeft="27dip"android:layout_marginRight="27dip"android:background="@drawable/bg_dialog_selector"android:orientation="vertical" ><TextViewandroid:id="@+id/tv_share_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="14dip"android:layout_marginLeft="18dip"android:layout_marginTop="18dip"android:gravity="center_vertical"android:text="选择日期"android:textColor="#000000"android:textSize="18sp" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="160dip"android:orientation="horizontal"android:layout_marginLeft="20dip"android:layout_marginRight="20dip"android:gravity="center_vertical"><com.ywl5320.pickaddress.wheel.widget.views.WheelViewandroid:id="@+id/wv_birth_year"android:layout_width="0dip"android:layout_weight="1"android:layout_height="match_parent"android:layout_gravity="center_vertical"/><com.ywl5320.pickaddress.wheel.widget.views.WheelViewandroid:id="@+id/wv_birth_month"android:layout_width="0dip"android:layout_weight="1"android:layout_height="match_parent"android:layout_gravity="center_vertical"/><com.ywl5320.pickaddress.wheel.widget.views.WheelViewandroid:id="@+id/wv_birth_day"android:layout_width="0dip"android:layout_weight="1"android:layout_height="match_parent"android:layout_gravity="center_vertical"/></LinearLayout><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="25dip"android:layout_marginBottom="21dip"><TextViewandroid:id="@+id/btn_myinfo_sure"android:layout_width="77dip"android:layout_height="33dip"android:layout_alignParentRight="true"android:layout_marginRight="15dip"android:text="确认"android:gravity="center"android:textSize="16sp" /><TextViewandroid:id="@+id/btn_myinfo_cancel"android:layout_width="77dip"android:layout_height="33dip"android:layout_toLeftOf="@+id/btn_myinfo_sure"android:text="取消"android:gravity="center"android:textSize="16sp" /></RelativeLayout></LinearLayout></LinearLayout>对话框style:

幸福就是重复。每天跟自己喜欢的人一起,通电话,

Android基于开源项目的WheelView的时间、地址联动选择对话框

相关文章:

你感兴趣的文章:

标签云: