本例使用到的类比较多,所使用的自定义的控件都是老外写好的,我知识根据他给的滑动的空间的基础上美化下和添加图片罢了,不多说直接看图:
第一步:设计弹出框xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical"
>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#ff424542"
android:orientation="horizontal"
android:layout_above="@+id/bithday_layout"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center_horizontal"
android:layout_centerVertical="true"
android:textColor="@android:color/white"
android:text="日期" />
<Button
android:id="@+id/cancel"
android:layout_width="80dip"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:background="@drawable/mm_title_btn_right"
android:text="取消"
android:textColor="@android:color/white"
/>
<Button
android:id="@+id/submit"
android:layout_width="80dip"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:background="@drawable/mm_title_act_btn"
android:text="完成"
android:textColor="@android:color/white"
android:layout_alignParentRight="true"
/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/bithday_layout"
android:layout_alignParentBottom="true"
android:layout_width="fill_parent"
android:layout_height="220dip"
android:gravity="center"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_marginLeft="15dip"
android:layout_marginRight="15dip"
android:layout_height="220dip"
android:gravity="center"
android:orientation="horizontal" >
<com.example.widget.WheelView
android:id="@+id/year"
android:layout_width="0.0dip"
android:layout_height="fill_parent"
android:layout_weight="1" />
<com.example.widget.WheelView
android:id="@+id/month"
android:layout_width="0.0dip"
android:layout_height="fill_parent"
android:layout_weight="1"
/>
<com.example.widget.WheelView
android:id="@+id/day"
android:layout_width="0.0dip"
android:layout_height="fill_parent"
android:layout_weight="1"
/>
</LinearLayout>
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="220.0dip"
android:layout_gravity="center"
android:background="@drawable/com_ttshrk_view_scroll_picker_background" >
</FrameLayout>
</RelativeLayout>
</LinearLayout>
第二步:编写弹出框PopupWindow类:
import android.app.Activity;
import android.content.Context;
import android.graphics.Typeface;
import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.ViewFlipper;
import com.example.widget.NumericWheelAdapter;
import com.example.widget.OnWheelChangedListener;
import com.example.widget.WheelView;
public class SelectBirthday extends PopupWindow implements OnClickListener {
private Activity mContext;
private View mMenuView;
private ViewFlipper viewfipper;
private Button btn_submit, btn_cancel;
private String age;
private DateNumericAdapter monthAdapter, dayAdapter, yearAdapter;
private WheelView year, month, day;
private int mCurYear = 80, mCurMonth = 5, mCurDay = 14;
private String[] dateType;
public SelectBirthday(Activity context) {
super(context);
mContext = context;
this.age = "2012-9-25";
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mMenuView = inflater.inflate(R.layout.birthday, null);
viewfipper = new ViewFlipper(context);
viewfipper.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
year = (WheelView) mMenuView.findViewById(R.id.year);
month = (WheelView) mMenuView.findViewById(R.id.month);
day = (WheelView) mMenuView.findViewById(R.id.day);
btn_submit = (Button) mMenuView.findViewById(R.id.submit);
btn_cancel = (Button) mMenuView.findViewById(R.id.cancel);
btn_submit.setOnClickListener(this);
btn_cancel.setOnClickListener(this);
Calendar calendar = Calendar.getInstance();
OnWheelChangedListener listener = new OnWheelChangedListener() {
public void onChanged(WheelView wheel, int oldValue, int newValue) {
updateDays(year, month, day);
}
};
int curYear = calendar.get(Calendar.YEAR);
if (age != null && age.contains("-")) {
String str[] = age.split("-");
mCurYear = 100 - (curYear - Integer.parseInt(str[0]));
mCurMonth = Integer.parseInt(str[1]) - 1;
mCurDay = Integer.parseInt(str[2]) - 1;
;
}
dateType = mContext.getResources().getStringArray(R.array.date);
monthAdapter = new DateNumericAdapter(context, 1, 12, 5);
monthAdapter.setTextType(dateType[1]);
month.setViewAdapter(monthAdapter);
month.setCurrentItem(mCurMonth);
month.addChangingListener(listener);
// year
yearAdapter = new DateNumericAdapter(context, curYear - 100, curYear+100,
100 - 20);
yearAdapter.setTextType(dateType[0]);
year.setViewAdapter(yearAdapter);
year.setCurrentItem(mCurYear);
year.addChangingListener(listener);
// day
updateDays(year, month, day);
day.setCurrentItem(mCurDay);
updateDays(year, month, day);
day.addChangingListener(listener);
viewfipper.addView(mMenuView);
viewfipper.setFlipInterval(6000000);
this.setContentView(viewfipper);
this.setWidth(LayoutParams.FILL_PARENT);
this.setHeight(LayoutParams.WRAP_CONTENT);
this.setFocusable(true);
ColorDrawable dw = new ColorDrawable(0x00000000);
this.setBackgroundDrawable(dw);
this.update();
}
@Override
public void showAtLocation(View parent, int gravity, int x, int y) {
super.showAtLocation(parent, gravity, x, y);
viewfipper.startFlipping();
}
private void updateDays(WheelView year, WheelView month, WheelView day) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR,
calendar.get(Calendar.YEAR) + year.getCurrentItem());
calendar.set(Calendar.MONTH, month.getCurrentItem());
int maxDays = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
dayAdapter = new DateNumericAdapter(mContext, 1, maxDays,
calendar.get(Calendar.DAY_OF_MONTH) - 1);
dayAdapter.setTextType(dateType[2]);
day.setViewAdapter(dayAdapter);
int curDay = Math.min(maxDays, day.getCurrentItem() + 1);
day.setCurrentItem(curDay - 1, true);
int years = calendar.get(Calendar.YEAR) - 100;
age = years + "-" + (month.getCurrentItem() + 1) + "-"
+ (day.getCurrentItem() + 1);
}
/**
* Adapter for numeric wheels. Highlights the current value.
*/
private class DateNumericAdapter extends NumericWheelAdapter {
// Index of current item
int currentItem;
// Index of item to be highlighted
int currentValue;
/**
* Constructor
*/
public DateNumericAdapter(Context context, int minValue, int maxValue,
int current) {
super(context, minValue, maxValue);
this.currentValue = current;
setTextSize(24);
}
protected void configureTextView(TextView view) {
super.configureTextView(view);
view.setTypeface(Typeface.SANS_SERIF);
}
public CharSequence getItemText(int index) {
currentItem = index;
return super.getItemText(index);
}
}
public void onClick(View v) {
this.dismiss();
}
}
代码主要就是这两个,其他的控件类不是本人编写就不上传了,直接上源码,有需要的自己下载研究
- 大小: 51.6 KB
分享到:
相关推荐
Android系统提供了一些内置的日期选择组件,如DatePicker,但有时这些组件可能无法满足开发者对于界面设计和用户体验的特殊要求。因此,自定义日期选择框成为了解决这一问题的有效途径。 自定义日期选择框的实现...
`PopupWindow`常用于创建底部弹出框,而`WheelView`则是一个可滚动的选择器,通常用于日期选择、时间选择等场景。下面将详细介绍这两个组件的使用方法以及如何将它们结合在实际应用中。 ### 1. PopupWindow详解 `...
在这种情况下,我们讨论的是一个特定类型的弹出框,它包含了一个日期选择器功能,允许用户选择特定的日期。这种设计通常在需要用户输入日期的场景下使用,如预订系统、日程安排或者填写表单。 首先,我们来详细解释...
通过以上步骤,你可以在Android应用中实现点击button1后,同时展示scroll滑动效果和Activity的弹出框效果。这种结合能够丰富用户的交互体验,提升应用的易用性和趣味性。在实际开发过程中,务必注意性能优化和用户...
在Android应用开发中,创建一个类似美团购物车的弹出框是一种常见的需求,它能够提供用户友好的交互体验。这个“Android仿美团弹出框购物车”Demo是为开发者提供了一个可以直接导入Android Studio (AS)并快速查看...
1. **Android**:在Android平台上,实现弹出下拉选择框通常涉及到`Spinner`组件或者自定义`PopupWindow`。`Spinner`是Android SDK内置的控件,可以直接在布局文件中声明,适用于简单的下拉选择需求。而`PopupWindow`...
"移动端日期选择插件Mdate"就是这样一款专为解决这一问题而设计的工具,它仿照iOS的日期选择器,旨在为Android和iOS平台提供一致且流畅的日期选择体验。 首先,Mdate插件的核心特性在于其高度的适配性。无论是...
这款插件名为DatePicker,顾名思义,它是一个支持多类型选择——日期、日期时间、时间——的时间选择器。开发者可以将其集成到Uni-App框架开发的应用程序中,以支持多种应用场景。例如,在日程安排类应用中,用户...
本教程将深入探讨如何在Android中实现一个仿iOS的时间选择控件,该控件允许用户通过点击按钮后弹出的时间选择对话框进行时间选择。 首先,我们需要了解iOS时间选择器的基本原理,它通常被称为"Picker View"或"轮盘...
在Android开发中,滚轮选择器(Wheel View)是一种常见的用户界面组件,它允许用户通过滚动来选择一个值,常用于日期选择、时间选择等场景。本教程将深入探讨如何自定义一个底部弹出的滚轮选择器。 一、滚轮选择器...
在Android开发中,自定义`LayoutManager`是实现各种复杂布局效果的重要手段。本文将深入探讨如何改造`LayoutManager`以实现弧形滚动以及中间元素放大的效果。这种效果常见于轮播图、焦点图等组件中,能提升用户体验...
在这个特定的项目中,我们需要创建一个仿美团风格的弹出分类选择框,它由两个ListView控件组成,左边显示大类,右边展示选定大类下的小类,实现了数据之间的紧密联动。 **1. 技术栈选择** 为了实现这样的功能,...
7. **交互设计**:为了使用户操作更加直观,可能还会有诸如弹出框、对话框等交互设计,这需要用到`DialogFragment`或`AlertDialog`等组件。 在阅读和学习这个源码时,可以关注以上几个方面,逐步理解自定义控件的...
综上所述,“弹出框形式LIST附带左滑边框”是一种高效且直观的UI设计模式,它结合了弹出框的临时性、列表的组织性和滑动的便捷性,为用户提供了一种高效且美观的交互方式。在实际开发中,需要综合运用多种技术和方法...
在iOS中,日期选择通常采用滚轮形式,用户可以通过滚动选择年、月和日。在Android上,我们可以使用`NumberPicker`或者自定义的滚轮组件来模拟这一效果。每个滚轮对应一个日期字段(年、月、日),并且需要处理好日期...
iOS的时间选择器通常展示为弹出的轮盘式界面。在Android中,我们可以使用`DatePickerDialog`或自定义布局来达到类似的效果。自定义布局可能涉及`NumberPicker`组件,通过监听滚动事件来处理时间和日期的选择。 这...
在Android开发中,为了提供与iOS类似的用户体验,开发者经常需要创建一些模仿iOS界面元素的控件,其中之一就是日期选择器。本教程将深入探讨如何在Android中实现一个仿iOS风格的日期选择控件。 首先,iOS的日期选择...
在创建点赞和评论弹出框时,我们可能会选择使用对话框布局(DialogFragment)或者自定义视图(Custom View)来实现弹出效果。 1. **点赞功能**: - **数据库存储**:点赞功能需要记录用户对内容的点赞状态,这通常...
为了实现半透明效果,可以在弹出框的背景中设置Alpha值。对于动画效果,可以使用ObjectAnimator或ValueAnimator来实现弹出和消失的过渡。 2. 使用第三方库:Android社区提供了许多优秀的日期选择器库,如`android-...
在Android开发中,有时我们需要实现特定的用户界面效果来提升用户体验,其中一种常见的需求就是仿照iOS的弹出框效果。本文将详细讲解如何通过自定义View在Android中实现这样的功能。 首先,我们来看一下核心的布局...