本例使用到的类比较多,所使用的自定义的控件都是老外写好的,我知识根据他给的滑动的空间的基础上美化下和添加图片罢了,不多说直接看图:


第一步:设计弹出框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);// yearyearAdapter = new DateNumericAdapter(context, curYear - 100, curYear+100,100 - 20);yearAdapter.setTextType(dateType[0]);year.setViewAdapter(yearAdapter);year.setCurrentItem(mCurYear);year.addChangingListener(listener);// dayupdateDays(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();}@Overridepublic 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 itemint currentItem;// Index of item to be highlightedint 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();}}

代码主要就是这两个,其他的控件类不是本人编写就不上传了,直接上源码,有需要的自己下载研究

更多相关文章

  1. 关于Android的Holo主题
  2. Android进程的内存管理分析
  3. 在Android的c/c++代码中使用LOG
  4. Android跨进程通信-IPC初探(三) - 使用AIDL
  5. Android中的横竖屏、资源、国际化的使用
  6. android基础学习--->Android(安卓)SharedPreferences存储对象和
  7. 箭头函数的基础使用
  8. NPM 和webpack 的基础使用
  9. Python list sort方法的具体使用

随机推荐

  1. android studio 获取sha1和md5值
  2. Android(安卓)KTX简介
  3. Binder 与AIDL
  4. Android(安卓)获取IP地址的实现方法
  5. Android(安卓)Studio下的build工具路径和
  6. android ListView 几个重要属性
  7. android平台解析epub格式的书籍信息
  8. android评分条RatingBar自定义设置
  9. Android(安卓)Framework入门介绍
  10. Android(安卓)VideoView简单播放视频