SpinnerWheel滚轮控件

Android-SpinnerWheel 仿IOS滚轮效果的spinner

项目地址: https://github.com/ai212983/android-spinnerwheel

效果图:https://raw.github.com/ai212983/android-spinnerwheel/master/.assets/screenshot_00.png


项目迭代,UI大改,特别是时间选择器,android自带的用的是在是差强人意,在网站上找到了这个东西,觉得还不错,至少满足了我项目的需求

xml中配置组件

<antistatic.spinnerwheel.WheelVerticalView
                    android:id="@+id/hour"
                    android:layout_width="50dp"
                    android:layout_height="wrap_content" />
activity中的代码

//时间选择
	hours = (AbstractWheel) m_dialog.findViewById(R.id.hour);
        hours.setViewAdapter(new NumericWheelAdapter(this, 0, 23));
        hours.setCyclic(true);
        mins = (AbstractWheel) m_dialog.findViewById(R.id.mins);
        mins.setViewAdapter(new MyNumericWheelAdapter(this, 0, 12, "%02d"));
        mins.setCyclic(true);
        // set current time
        Calendar c = Calendar.getInstance();
        int curHours = c.get(Calendar.HOUR_OF_DAY);
        int curMinutes = c.get(Calendar.MINUTE);
        hours.setCurrentItem(curHours);
        mins.setCurrentItem(curMinutes);
        //日期选择
        day = (AbstractWheel) m_dialog.findViewById(R.id.day);
        Calendar calendar = Calendar.getInstance(Locale.CHINESE);
        mDayArrayAdapter = new MyDayArrayAdapter(this, calendar);
        day.setViewAdapter(mDayArrayAdapter);
        day.setCurrentItem(mDayArrayAdapter.getToday());
时间数字adapter

public class MyNumericWheelAdapter extends NumericWheelAdapter {

    
    public MyNumericWheelAdapter(Context context, int minValue, int maxValue,
			String format) {
		super(context, minValue, maxValue, format);
		// TODO Auto-generated constructor stub
		this.minValue = minValue;
        this.maxValue = maxValue;
        this.format = format;
	}
	// Values
    private int minValue;
    private int maxValue;
    
    // format
    private String format;
    

    @Override
    public CharSequence getItemText(int index) {
        if (index >= 0 && index < getItemsCount()) {
            int value = index*5;
            return format != null ? String.format(format, value) : Integer.toString(value);
        }
        return null;
    }
    @Override
    public int getItemsCount() {
//        return maxValue - minValue + 1;
    	return 12;
    }
日期的adapter

public class MyDayArrayAdapter extends AbstractWheelTextAdapter{
	// Count of days to be shown
    private final int daysCount = 18;
    // Calendar
    private Calendar calendar;
	private DateFormat format1 = new SimpleDateFormat("dd日");
	private DateFormat format2 = new SimpleDateFormat("yyyy年MM月");
    private DateFormat dFormat = new SimpleDateFormat("yyyy-MM-dd");
    /**
     * Constructor
     */
    protected MyDayArrayAdapter(Context context, Calendar calendar) {
        super(context, R.layout.time_picker_custom_day, NO_RESOURCE);
        this.calendar = calendar;
        setItemTextResource(R.id.time2_monthday);
    }
    public int getToday() {
        return daysCount / 2;
    }
    @Override
    public View getItem(int index, View cachedView, ViewGroup parent) {
        int day = -daysCount/2 + index;
        Calendar newCalendar = (Calendar) calendar.clone();
        newCalendar.add(Calendar.DAY_OF_YEAR, day);
        
        View view = super.getItem(index, cachedView, parent);
        TextView weekday = (TextView) view.findViewById(R.id.time2_day);
        weekday.setText(format1.format(newCalendar.getTime()));

        TextView monthday = (TextView) view.findViewById(R.id.time2_monthday);
        if (day == 0) {
//            monthday.setText("Today");
            monthday.setTextColor(0xFF60BDFF);
            weekday.setTextColor(0xFF60BDFF);
        } else {
        	monthday.setTextColor(0xFF111111);
        	weekday.setTextColor(0xFF111111);
		}
        monthday.setText(format2.format(newCalendar.getTime()));
        view.setTag(dFormat.format(newCalendar.getTime()));
        return view;
    }
    /**
     * 一共有多少行数据
     */
    @Override
    public int getItemsCount() {
        return daysCount + 1;
    }
    /**
     * 获取当前行的数据
     */
    @Override
    protected CharSequence getItemText(int index) {
    	if (index >= 0 && index < getItemsCount()) {
    		Calendar nCalendar = (Calendar) calendar.clone();
    		nCalendar.add(Calendar.DAY_OF_YEAR, -daysCount/2 + index);
    		return dFormat.format(nCalendar.getTime());
        }
    	return TimeUtil.currentLocalDateString();
    }
}

还有其他的用法,暂时只用到时间日期的显示和选择,不管怎么样,问题解决才是重点。


我为自己写博客O(∩_∩)O~




评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值