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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 淘宝id被监控怎么办 快递扫描漏掉了怎么办 千牛空间不足怎么办 iphone储存将满怎么办 微销通老是请求拒绝怎么办 联璧金融的钱怎么办 店家不给退货怎么办 京东换货不成功怎么办 京东审核关闭怎么办 服装店盘货衣服不对怎么办 盘点衣服少了怎么办 超市盘点少东西怎么办 货到付款买家不收怎么办 快递员忘记收钱怎么办 发货了买家退款怎么办 买家一直不退款怎么办 京东商家退货怎么办 发货后退货邮费怎么办 淘宝货到退款怎么办 淘宝收不到货怎么办 淘宝不处理投诉怎么办 实体店不能退货怎么办 顾客无理由退货怎么办 京东衣服质量问题怎么办 买家退货要运费怎么办 卖家不给退运费怎么办 淘宝申请退款卖家不退怎么办 网购商家报复怎么办 淘宝退货店家不同意怎么办 淘宝退货不同意退款怎么办 运费险没收到怎么办 地税逾期未申报怎么办 转转买家发到付怎么办 捡到苹果手机打不开怎么办 捡到指纹手机打不开怎么办 捡到手机密码打不开怎么办 遇到假苹果售后怎么办 做微商被骗囤货怎么办 代理如果不做了怎么办 微商加盟费不退怎么办 手机背面发霉了怎么办