android 弹出日期滑动选择框,日期滚动滑动选择
16lz
2022-03-22
本例使用到的类比较多,所使用的自定义的控件都是老外写好的,我知识根据他给的滑动的空间的基础上美化下和添加图片罢了,不多说直接看图:
第一步:设计弹出框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();}}
代码主要就是这两个,其他的控件类不是本人编写就不上传了,直接上源码,有需要的自己下载研究
更多相关文章
- [Android]解决Fragment无法使用android:onClick属性
- Android中的Intent标准跳转应用
- Android(安卓)ListView异步加载图片乱序问题,原因分析及解决方案
- Android(安卓)从硬件到应用:一步一步向上爬 4 -- 使用 JNI 方法调
- Android:使用Gson解析复杂的JSON数据
- Android(安卓)开发中使用 SQLite 数据库
- 箭头函数的基础使用
- NPM 和webpack 的基础使用
- Python list sort方法的具体使用