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


android 弹出日期滑动选择框,日期滚动滑动选择

第一步:设计弹出框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 初学】3、控件布局初步
  2. Android 自定义View——自定义View控件
  3. android控件属性介绍
  4. EditText控件设置只读
  5. Android上鲜为人知的UI控件介绍和使用
  6. 用shape美化控件
  7. Android 控件界面转成Bitmap
  8. android UI控件之webview控件使用实例:加载网页到webview中

随机推荐

  1. Android Studio2.0以后不能查看源码
  2. android代理联网,wap方式联网
  3. qt for android环境搭建(Linux平台)
  4. 2011.07.08(4)——— android Intent.creat
  5. Android(安卓)通过网络图片路径查看图片
  6. Android中ListActivity用法实例分析
  7. android 模拟 再按一次退出程序onKeyDown
  8. Android线程池(二)
  9. mtk平台android提速
  10. frame动画