Android日历周视图 可添加事件标记
来源:互联网 发布:yum和yummy的区别 编辑:程序博客网 时间:2024/06/06 09:29
package cn.edu.sxu.www.customercalendar;import android.os.Bundle;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.text.TextUtils;import android.widget.TextView;import java.util.ArrayList;import java.util.Calendar;import java.util.List;public class MainActivity extends AppCompatActivity { private ViewPager viewPager; private CalendarAdapger calendarAdapger; private List<viewPagerItem> lists; private TextView tv_tip; private float lastValue; private boolean isRightToLeft = false; //从右向左滑动 private boolean isLeftToRight = false; //从左向右滑动 private String currentDate; private DayItem oldDayItem; private List<String> eventList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); eventList=new ArrayList<>(); eventList.add("20170308");//实际上是四月八号的事件 eventList.add("20170303"); eventList.add("20161222"); eventList.add("20170403"); eventList.add("20170508"); eventList.add("20170512"); viewPager= (ViewPager) findViewById(R.id.viewpater); tv_tip= (TextView) findViewById(R.id.tv_tip); lists=new ArrayList<>(); Calendar calendar= Calendar.getInstance(); int day=calendar.get(Calendar.DAY_OF_MONTH); int week=calendar.get(Calendar.DAY_OF_WEEK); int month=calendar.get(Calendar.MONTH); int year=calendar.get(Calendar.YEAR); currentDate=""+year+(month<10?"0"+month:month+"")+(day<10?"0"+day:day+""); int lastDay=getLastDay(calendar); String[] nums=makeViewpagerItem(day,week,lastDay,-1,month,year); tv_tip.setText(year+"年"+(month+1)+"月"); //计算下一页数据 if(TextUtils.isEmpty(nums[1])||Integer.parseInt(nums[1])==lastDay) { //下一月份 //判断是不是该到下一年 if(month==11) { //取下一年 calendar.set(year+1,0,1); } else { calendar.set(year,month+1,1); } } else { //本月 calendar.set(year,month,Integer.parseInt(nums[1])+1); } int day1=calendar.get(Calendar.DAY_OF_MONTH); int week1=calendar.get(Calendar.DAY_OF_WEEK); int month1=calendar.get(Calendar.MONTH); int year1=calendar.get(Calendar.YEAR); int lastDay1=getLastDay(calendar); String[] nums1=makeViewpagerItem(day1,week1,lastDay1,-1,month1,year1); //计算前一页数据 if(TextUtils.isEmpty(nums[0])||Integer.parseInt(nums[0])==0) { //前一月份 //判断是不是该到前一年 if(month==0) { //取上一年 calendar.set(year-1,11,1); int week2=calendar.get(Calendar.DAY_OF_WEEK); int lastDay2=getLastDay(calendar); int date=lastDay2-(week2-1); calendar.set(year-1,11,date); } else { calendar.set(Calendar.MONTH,month-1); int lastDay2=getLastDay(calendar); int week2=calendar.get(Calendar.DAY_OF_WEEK); int date=lastDay2-(week2-1); calendar.set(year,month-1,date); } } else { //本月 calendar.set(year,month,Integer.parseInt(nums[0])-1); } day=calendar.get(Calendar.DAY_OF_MONTH); week=calendar.get(Calendar.DAY_OF_WEEK); month=calendar.get(Calendar.MONTH); year=calendar.get(Calendar.YEAR); lastDay=getLastDay(calendar); makeViewpagerItem(day,week,lastDay,0,month,year); calendarAdapger=new CalendarAdapger(lists,this); viewPager.setAdapter(calendarAdapger); viewPager.setCurrentItem(Integer.MAX_VALUE/2+1); viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { if (positionOffset == 0.0){ return; } if (lastValue > positionOffset) { // 递减,从左向右滑动 isRightToLeft = false; isLeftToRight = true; } else if (lastValue < positionOffset) { // 递增,从右向左滑动 isRightToLeft = true; isLeftToRight = false; } else if (lastValue == positionOffset) { isLeftToRight = isRightToLeft = false; } lastValue = positionOffset; } @Override public void onPageSelected(int position) { viewPagerItem viewPagerItem=lists.get(position%3); tv_tip.setText(viewPagerItem.getYear()+"年"+(viewPagerItem.getMonth()+1)+"月"); if(isRightToLeft)//右边滑动 { String[] nums=viewPagerItem.getNums(); int month=viewPagerItem.getMonth(); int year=viewPagerItem.getYear(); int lastDay=viewPagerItem.getLastDay(); Calendar calendar=Calendar.getInstance(); //计算下一页数据 if(TextUtils.isEmpty(nums[1])||Integer.parseInt(nums[1])==lastDay) { //下一月份 //判断是不是该到下一年 if(month==11) { //取下一年 calendar.set(year+1,0,1); } else { calendar.set(year,month+1,1); } } else { //本月 calendar.set(year,month,Integer.parseInt(nums[1])+1); } int day1=calendar.get(Calendar.DAY_OF_MONTH); int week1=calendar.get(Calendar.DAY_OF_WEEK); int month1=calendar.get(Calendar.MONTH); int year1=calendar.get(Calendar.YEAR); int lastDay1=getLastDay(calendar); makeViewpagerItem(day1,week1,lastDay1,month1,year1,lists.get((position-2)%3)); calendarAdapger.notifyDataSetChanged(); } else//左边滑动 { String[] nums=viewPagerItem.getNums(); int month=viewPagerItem.getMonth(); int year=viewPagerItem.getYear(); Calendar calendar=Calendar.getInstance(); //计算前一页数据 if(TextUtils.isEmpty(nums[0])||Integer.parseInt(nums[0])==0) { //前一月份 //判断是不是该到前一年 if(month==0) { //取上一年 calendar.set(year-1,11,1); int week=calendar.get(Calendar.DAY_OF_WEEK); int lastDay=getLastDay(calendar); int date=lastDay-(week-1); calendar.set(year-1,11,date); } else { calendar.set(Calendar.MONTH,month-1); int lastDay=getLastDay(calendar); int week=calendar.get(Calendar.DAY_OF_WEEK); int date=lastDay-(week-1); calendar.set(year,month-1,date); } } else { //本月 calendar.set(year,month,Integer.parseInt(nums[0])-1); } int day1=calendar.get(Calendar.DAY_OF_MONTH); int week1=calendar.get(Calendar.DAY_OF_WEEK); int month1=calendar.get(Calendar.MONTH); int year1=calendar.get(Calendar.YEAR); int lastDay1=getLastDay(calendar); makeViewpagerItem(day1,week1,lastDay1,month1,year1,lists.get((position+2)%3)); calendarAdapger.notifyDataSetChanged(); } } @Override public void onPageScrollStateChanged(int state) { } }); } public DayItem getOldDayItem() { return oldDayItem; } public void setOldDayItem(DayItem oldDayItem) { this.oldDayItem = oldDayItem; } /** * 返回第一个数和最后一个数 * @param parameterday * @param week * @param lastDay * @return */ private String[] makeViewpagerItem(int parameterday,int week,int lastDay,int flag,int month,int year) { int day=parameterday; List<DateBean> dateBeens=new ArrayList<>(); for(int i=week;i>0;i--) { if(day<1) { dateBeens.add(0,new DateBean("",false,month<10?"0"+month:month+"",year+"")); } else { dateBeens.add(0,new DateBean(day<10?"0"+day:day+"",false,month<10?"0"+month:month+"",year+"")); } day--; } day=parameterday; for(int i=week+1;i<=7;i++) { day++; if(day>lastDay) { dateBeens.add(new DateBean("",false,month<10?"0"+month:month+"",year+"")); } else { dateBeens.add(new DateBean(day<10?"0"+day:day+"",false,month<10?"0"+month:month+"",year+"")); } } //给"今天"做标识 for(int i=0;i<dateBeens.size();i++) { DateBean dateBean=dateBeens.get(i); if(currentDate.equals(dateBean.getStrDate())) { dateBean.setToday(true); } } viewPagerItem viewPagerItem=new viewPagerItem(this); String [] num=new String[2]; num[0]=dateBeens.get(0).getDate(); num[1]=dateBeens.get(6).getDate(); viewPagerItem.setDay(parameterday); viewPagerItem.setMonth(month); viewPagerItem.setYear(year); viewPagerItem.setNums(num); viewPagerItem.setData(dateBeens); if(flag==0) { lists.add(0,viewPagerItem); } else { lists.add(viewPagerItem); } return num; } private int getLastDay(Calendar calendar) { //得到月末 calendar.set(Calendar.DAY_OF_MONTH,calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); return calendar.get(Calendar.DAY_OF_MONTH); } private String[] makeViewpagerItem(int parameterday,int week,int lastDay,int month,int year,viewPagerItem viewPagerItem) { int day=parameterday; List<DateBean> dateBeens=new ArrayList<>(); for(int i=week;i>0;i--) { if(day<1) { dateBeens.add(0,new DateBean("",false,month<10?"0"+month:month+"",year+"")); } else { dateBeens.add(0,new DateBean(day<10?"0"+day:day+"",false,month<10?"0"+month:month+"",year+"")); } day--; } day=parameterday; for(int i=week+1;i<=7;i++) { day++; if(day>lastDay) { dateBeens.add(new DateBean("",false,month<10?"0"+month:month+"",year+"")); } else { dateBeens.add(new DateBean(day<10?"0"+day:day+"",false,month<10?"0"+month:month+"",year+"")); } } String [] num=new String[2]; num[0]=dateBeens.get(0).getDate(); num[1]=dateBeens.get(6).getDate(); viewPagerItem.setDay(parameterday); viewPagerItem.setMonth(month); viewPagerItem.setYear(year); viewPagerItem.setNums(num); viewPagerItem.setData(dateBeens); return num; } public String getCurrentDate() { return currentDate; } public void setCurrentDate(String currentDate) { this.currentDate = currentDate; } public List<String> getEventList() { return eventList; } public void setEventList(List<String> eventList) { this.eventList = eventList; }}
package cn.edu.sxu.www.customercalendar;import android.content.Context;import android.support.v4.view.PagerAdapter;import android.util.Log;import android.view.View;import android.view.ViewGroup;import java.util.List;/** * Created by ${huozhenpeng} on 17/3/27. * Company : www.miduo.com */public class CalendarAdapger extends PagerAdapter { private List<viewPagerItem> lists; private Context context; public CalendarAdapger(List<viewPagerItem> lists,Context context) { this.lists=lists; this.context=context; } @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View view, Object object) { return view==object; } @Override public void destroyItem(ViewGroup container, int position, Object object) { Log.e("abc","destroyItem----->"+(position%3));// container.removeView(lists.get(position%3)); } @Override public Object instantiateItem(ViewGroup container, int position) { Log.e("abc","instantiateItem------>"+(position%3)); viewPagerItem viewPagerItem=lists.get(position%3); String log=""; for(int i=0;i<viewPagerItem.getLists().size();i++) { log+=viewPagerItem.getLists().get(i).getDate()+"----"; } Log.e("abc",log); ViewGroup parentView= (ViewGroup) viewPagerItem.getParent(); if(parentView!=null) { parentView.removeView(viewPagerItem); } container.addView(lists.get(position%3)); return lists.get(position%3); }}
package cn.edu.sxu.www.customercalendar;import android.text.TextUtils;import java.io.Serializable;/** * Created by ${huozhenpeng} on 17/3/27. * Company : www.miduo.com */public class DateBean implements Serializable { private String date; private boolean needFlag; private boolean isToday; private String month; private String year; private String strDate; public String getStrDate() { strDate = year + month + date; return strDate; } public String getYear() { return year; } public void setYear(String year) { this.year = year; } public String getMonth() { return month; } public void setMonth(String month) { this.month = month; } public boolean isToday() { return isToday; } public void setToday(boolean today) { isToday = today; } public DateBean(String date, boolean needFlag,String month,String year) { this.date=date; this.needFlag=needFlag; this.month=month; this.year=year; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } public boolean isNeedFlag() { return needFlag; } public void setNeedFlag(boolean needFlag) { this.needFlag = needFlag; }}
package cn.edu.sxu.www.customercalendar;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.text.TextPaint;import android.util.AttributeSet;import android.view.View;/** * Created by ${huozhenpeng} on 17/3/27. * Company : www.miduo.com */public class DayItem extends View { private int width; private int height; private TextPaint textPaint; private Paint pointPaint; private Paint circlePaint; private int radius; private int circleWidth; private MainActivity context; public DayItem(Context context) { this(context,null); } public DayItem(Context context, AttributeSet attrs) { this(context, attrs,-1); } public DayItem(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); this.context= (MainActivity) context; init(); } private void init() { textPaint=new TextPaint(Paint.ANTI_ALIAS_FLAG); textPaint.setColor(Color.parseColor("#000000")); textPaint.setTextAlign(Paint.Align.CENTER); textPaint.setTextSize(context.getResources().getDimension(R.dimen.px2sp_24)); pointPaint=new Paint(Paint.ANTI_ALIAS_FLAG); pointPaint.setColor(Color.parseColor("#369ed2")); radius= (int) context.getResources().getDimension(R.dimen.px2dp_6); pointPaint.setStrokeWidth(radius); circlePaint=new Paint(Paint.ANTI_ALIAS_FLAG); circlePaint.setColor(Color.parseColor("#ff0000")); circleWidth= (int) context.getResources().getDimension(R.dimen.px2dp_2); circlePaint.setStrokeWidth(circleWidth); circlePaint.setStyle(Paint.Style.STROKE); } private int baseY; @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //绘制文字 // 计算Baseline绘制的Y坐标 baseY = (int) ((height/ 2) - ((textPaint.descent() + textPaint.ascent()) / 2)); canvas.drawText(dateBean.getDate(), width/2, baseY, textPaint); //绘制标记 if(dateBean.isNeedFlag()) { canvas.drawCircle(width / 2, height - radius, radius, pointPaint); } //绘制红色圆环 if(dateBean.isToday()) { if(width>height) { canvas.drawCircle(width/2,height/2,height/2-circleWidth/2,circlePaint); } else { canvas.drawCircle(width/2,height/2,width/2-circleWidth/2,circlePaint); } } } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); width=w; height=h; } private DateBean dateBean; public void setData(DateBean dateBean) { this.dateBean=dateBean; } public DateBean getData() { return this.dateBean; }}
package cn.edu.sxu.www.customercalendar;import android.content.Context;import android.util.AttributeSet;import android.view.View;import android.view.ViewGroup;import android.widget.LinearLayout;import android.widget.Toast;import java.util.List;/** * Created by ${huozhenpeng} on 17/3/27. * Company : www.miduo.com */public class viewPagerItem extends LinearLayout implements View.OnClickListener{ private MainActivity context; private List<DateBean> lists; private int day; private int week; private int month; private int year; private int lastDay; private String[] nums; private List<Long> events; public List<DateBean> getLists() { return lists; } public void setLists(List<DateBean> lists) { this.lists = lists; } public int getDay() { return day; } public void setDay(int day) { this.day = day; } public int getWeek() { return week; } public void setWeek(int week) { this.week = week; } public int getMonth() { return month; } public void setMonth(int month) { this.month = month; } public int getYear() { return year; } public void setYear(int year) { this.year = year; } public int getLastDay() { return lastDay; } public void setLastDay(int lastDay) { this.lastDay = lastDay; } public String[] getNums() { return nums; } public void setNums(String[] nums) { this.nums = nums; } public viewPagerItem(Context context) { this(context,null); } public viewPagerItem(Context context, AttributeSet attrs) { this(context, attrs,-1); } public viewPagerItem(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); this.context= (MainActivity) context; } public void setData(List<DateBean> lists) { this.lists=lists; removeAllViews(); for(int i=0;i<lists.size();i++) { DayItem dayItem=new DayItem(context); dayItem.setData(lists.get(i)); LinearLayout.LayoutParams layoutParams=new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); layoutParams.weight=1; dayItem.setLayoutParams(layoutParams); addView(dayItem); dayItem.setOnClickListener(this); dayItem.setTag(lists.get(i)); DateBean dateBean=lists.get(i); if(context.getCurrentDate().equals(dateBean.getStrDate())) { context.setOldDayItem(dayItem); dateBean.setToday(true); } else { dateBean.setToday(false); } if(context.getEventList()!=null) { if (context.getEventList().contains(dateBean.getStrDate())) { dateBean.setNeedFlag(true); } } } } @Override public void onClick(View v) { DateBean dateBean= (DateBean) v.getTag(); Toast.makeText(context,dateBean.getDate(),Toast.LENGTH_SHORT).show(); ((DateBean) v.getTag()).setToday(true); context.setCurrentDate(dateBean.getStrDate()); v.invalidate(); context.getOldDayItem().getData().setToday(false); context.getOldDayItem().invalidate(); context.setOldDayItem((DayItem) v); }}
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <include layout="@layout/top_week_title" /> <android.support.v4.view.ViewPager android:id="@+id/viewpater" android:layout_width="match_parent" android:layout_height="@dimen/px2dp_72"> </android.support.v4.view.ViewPager> <TextView android:id="@+id/tv_tip" android:layout_marginTop="100dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" /></LinearLayout>
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:paddingTop="@dimen/activity_horizontal_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:layout_height="wrap_content"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:text="@string/sunday" android:textColor="@color/calendar_week_color" android:textSize="12sp" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:text="@string/monday" android:textColor="@color/calendar_week_color" android:textSize="12sp" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:text="@string/tuseday" android:textColor="@color/calendar_week_color" android:textSize="12sp" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:text="@string/wednesday" android:textColor="@color/calendar_week_color" android:textSize="12sp" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:text="@string/thursday" android:textColor="@color/calendar_week_color" android:textSize="12sp" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:text="@string/friday" android:textColor="@color/calendar_week_color" android:textSize="12sp" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:text="@string/saturday" android:textColor="@color/calendar_week_color" android:textSize="12sp" /></LinearLayout>
<resources> <string name="app_name">CalendarWeek</string> <string name="monday">一</string> <string name="tuseday">二</string> <string name="wednesday">三</string> <string name="thursday">四</string> <string name="friday">五</string> <string name="saturday">六</string> <string name="sunday">日</string></resources>
<?xml version="1.0" encoding="utf-8"?><resources> <color name="colorPrimary">#3F51B5</color> <color name="colorPrimaryDark">#303F9F</color> <color name="colorAccent">#FF4081</color> <color name="calendar_week_color">#cdcdcd</color> <color name="colorWhite">#ffffffff</color></resources>
源码下载:
点击打开链接
0 0
- Android日历周视图 可添加事件标记
- Android自定义可标记日历
- Android自定义可标记日历
- Android自定义可标记日历
- Android添加事件到日历
- Android 自定义日历周视图
- android自定义日历并添加事件
- Android 向系统日历中添加事件
- Android 弹出系统日历,添加提醒事件
- IOS添加日历事件
- iOS 添加日历事件
- 调用Android自带日历功能(日历列表单、添加一个日历事件)
- Android向系统日历中添加日程事件
- android 应用组件[通用 Intent---添加日历事件] 五
- android 仿小米日历 周视图 月视图切换
- ios 添加日历提醒事件
- Android日历事件提醒
- 周视图日历计算方法
- 什么是SQL注入
- 一步一步写web之初识web(五-数据滚动实现)
- 【Heydrones】飞手百科第一篇:一定要看的无人机原理总结
- 【Java】关于Java遍历List的几种方法
- 奔三搬砖人重撸Java之注释与doc
- Android日历周视图 可添加事件标记
- PAT(乙) 1023. 组个最小数 (20)
- 蓝桥杯模拟题5 九宫格(暴力求解)
- git命令
- 初识socket.io
- 2016年上半年信息系统项目管理师真题之上午题答案之十一(第51-55题)
- 配置vim编辑器
- MFC中句柄和指针的区别
- python3爬虫例子