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


第一步:设计弹出框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]解决Fragment无法使用android:onClick属性
  2. Android中的Intent标准跳转应用
  3. Android(安卓)ListView异步加载图片乱序问题,原因分析及解决方案
  4. Android(安卓)从硬件到应用:一步一步向上爬 4 -- 使用 JNI 方法调
  5. Android:使用Gson解析复杂的JSON数据
  6. Android(安卓)开发中使用 SQLite 数据库
  7. 箭头函数的基础使用
  8. NPM 和webpack 的基础使用
  9. Python list sort方法的具体使用

随机推荐

  1. Android NDK 的学习之旅-----HelloWorld
  2. Android Asynchronous Http Client 中文
  3. android开发专题系列-Android开发指南
  4. material design 的android开源代码整理
  5. Android(安卓)在 Fragment 中集成 React-
  6. android使用xml实现虚线效果
  7. Android Framework(III)Spring-mobile an
  8. 一些英文面试题(Android)
  9. Android ServiceManager源码(一)-- C语言部
  10. android实现关键字搜索功能