可能是第十好的Android 开源 日历 Calendar 仿小米,作为移动开发程序员

CalendarViewAdapter.saveDate(selectedDate);onSelectDateListener.onSelectDate(selectedDate);seedDate = selectedDate;} else if (weeks[row].days[col].getState() == State.PAST_MONTH){selectedDate = weeks[row].days[col].getDate();CalendarViewAdapter.saveDa
摘要由CSDN通过智能技术生成

CalendarViewAdapter.saveDate(selectedDate);

onSelectDateListener.onSelectDate(selectedDate);

seedDate = selectedDate;

} else if (weeks[row].days[col].getState() == State.PAST_MONTH){

selectedDate = weeks[row].days[col].getDate();

CalendarViewAdapter.saveDate(selectedDate);

onSelectDateListener.onSelectOtherMonth(-1);

onSelectDateListener.onSelectDate(selectedDate);

} else if (weeks[row].days[col].getState() == State.NEXT_MONTH){

selectedDate = weeks[row].days[col].getDate();

CalendarViewAdapter.saveDate(selectedDate);

onSelectDateListener.onSelectOtherMonth(1);

onSelectDateListener.onSelectDate(selectedDate);

}

} else {

weeks[row].days[col].setState(State.SELECT);

selectedDate = weeks[row].days[col].getDate();

CalendarViewAdapter.saveDate(selectedDate);

onSelectDateListener.onSelectDate(selectedDate);

seedDate = selectedDate;

}

}

}

  • 调用Renderer的draw方法时使用dayRenderer.drawDay(canvas , weeks[row].days[col]),dayRenderer是一个接口,在lib中有一个DayView 的抽象类实现该接口。 其中的drawDay方法完成了对该天到calendar的canvas上的绘制

@Override

public void drawDay(Canvas canvas , Day day) {

this.day = day;

refreshContent();

int saveId = canvas.save();

canvas.translate(day.getPosCol() * getMeasuredWidth(),

day.getPosRow() * getMeasuredHeight());

draw(canvas);

canvas.restoreToCount(saveId);

}

  • 使用继承自ViewPager的MonthPager来存放calendar的view

viewPageChangeListener = new ViewPager.OnPageChangeListener() {}

//新建viewPagerChangeListener

@Override

protected void onSizeChanged(int w, int h, int oldW, int oldH) {

cellHeight = h / 6;

super.onSizeChanged(w, h, oldW, oldH);

}//重写onSizeChanged,获取dayView的高度

public int getTopMovableDistance() {

CalendarViewAdapter calendarViewAdapter = (CalendarViewAdapter) getAdapter();

rowIndex = calendarViewAdapter.getPagers().get(currentPosition % 3).getSelectedRowIndex();

return cellHeight * rowIndex;

}//计算周月切换时在到达选中行之前MonthPager收起的距离

public int getRowIndex() {

CalendarViewAdapter calendarViewAdapter = (CalendarViewAdapter) getAdapter();

rowIndex = calendarViewAdapter.getPagers().get(currentPosition % 3).getSelectedRowIndex();

Log.e(“ldf”,"getRowIndex = " + rowIndex);

return rowIndex;

}//计算选中日期所在的行数

  • 使用CalendarViewAdapter为MonthPager填充calendar的实例

@Override

public void setPrimaryItem(ViewGroup container, int position, Object object) {

super.setPrimaryItem(container, position, object);

this.currentPosition = position;

}

@Override

public Object instantiateItem(ViewGroup container, int position) {

if(position < 2){

return null;

}

Calendar calendar = calendars.get(position % calendars.size());

if(calendarType == Calen

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值