当前位置: 代码迷 >> Android >> android 弹出日期滑动抉择框,日期滚动滑动选择
  详细解决方案

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

热度:82   发布时间:2016-05-01 13:32:36.0
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);		// 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();	}}

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

?

  相关解决方案