赞
踩
标题:如何实现Android自定义日期段选择控件功能
作者:小猪
原文链接:如何实现Android自定义日期段选择控件功能 - 移动开发 - 亿速云
这篇文章主要讲解了如何实现Android自定义日期段选择控件功能,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。
开发中碰到个需求,需要在一个空间中选择完成开始和结束时间。实现的过程走的是程序员开发的老路子,找到轮子后自己改吧改吧就成了。
当时做的时候有几个需求:1.当天为最大的结束日期,2.最大选择范围1年,3.开始时间和结束时间可以为同一天。如有其他需求实现,可以参考代码改进一下。先上效果图:
视频点击后的虚影是屏幕录制的原因。实现步骤:(如有缺失什么资源,请告知。开始时间和结束时间显示自己布局内添加就可以)
- <declare-styleable name="MyCalendar">
- <attr name="dateformat" format="string"></attr>
- <attr name="titleSize" format="dimension"></attr>
- <attr name="titleColor" format="color"></attr>
- <attr name="goIcon" format="reference"></attr>
- <attr name="preIcon" format="reference"></attr>
- <attr name="dayInMonthColor" format="color"></attr>
- <attr name="dayOutMonthcolor" format="color"></attr>
- <attr name="todayColor" format="color"></attr>
- <attr name="todayEmptycircleColor" format="color"></attr>
- <attr name="todayFillcircleColor" format="color"></attr>
- <attr name="calendarbackground" format="color|reference"></attr>
- </declare-styleable>
- /**
- * @Description: 可以选择时间范围的日历控件
- * @Author MengXY
- * @Emil mxy_2012_1@163.com
- * @Date 2019/1/8
- */
- public class CalendarView extends LinearLayout implements View.OnClickListener{
- private TextView title;
- private RecyclerView recyclerView;
- private RelativeLayout layout_calendar_gonext;
- private RelativeLayout layout_calendar_goup;
- private LinearLayoutManager linearLayoutManager;
- private Calendar curDate = Calendar.getInstance();
- //从服务器获取的日期
- private Date dateFromServer;
- //外层主recyclerview的adapter
- private MainRvAdapter mainAdapter;
- private List<CalendarCell> months = new ArrayList<>();
- private Context context;
- //相关属性
- private int titleColor;
- private int titleSize;
- private int enableSelectColor;
- private int disableSeletColor;
- private int todayColor;
- private int todayEmptyColor;
- private int todayFillColor;
- /** 初始日期为当前日期前一年*/
- private String time;
- private long timeBefor;
- private long timeNow;
- private List<String> titles = new ArrayList<>();
- //点击的开始时间与结束时间
- private Date sDateTime;
- private Date eDateTime;
- private boolean isSelectingSTime = true;
- private HashMap<Integer, SubRvAdapter> allAdapters = new HashMap<>();
- public CalendarView(Context context) {
- this(context, null);
- }
- public CalendarView(Context context, AttributeSet attrs) {
- this(context, attrs, 0);
- }
- private int maxSelect = 13;
- public CalendarView(Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MyCalendar);
- titleColor = ta.getColor(R.styleable.MyCalendar_titleColor, Color.WHITE);
- titleSize = (int) ta.getDimension(R.styleable.MyCalendar_titleSize, 15);
- enableSelectColor = ta.getColor(R.styleable.MyCalendar_dayInMonthColor, context.getResources().getColor(R.color.text_lable));
- disableSeletColor = ta.getColor(R.styleable.MyCalendar_dayOutMonthcolor, context.getResources().getColor(R.color.text_unenable));
- todayColor = ta.getColor(R.styleable.MyCalendar_todayColor, Color.BLUE);
- todayEmptyColor = ta.getColor(R.styleable.MyCalendar_todayEmptycircleColor, Color.CYAN);
- todayFillColor = ta.getColor(R.styleable.MyCalendar_todayFillcircleColor, Color.CYAN);
- ta.recycle();
- this.context = context;
- init(context);
- }
- //该方法用于设置从服务器获取的时间,如果没有从服务器获取的时间将使用手机本地时间
- private void initTime() {
- Calendar calendar = Calendar.getInstance(); //得到日历
- calendar.setTime(new Date());
- calendar.add(Calendar.MONTH,-(maxSelect-1));
- time = DateUtils.formatData(calendar.getTime(),Constant.TFORMATE_YMD);
- timeBefor = DateUtils.getDataTime(time);
- String now = DateUtils.formatData(new Date(),Constant.TFORMATE_YMD);
- timeNow = DateUtils.getDataTime(now);
- // LogUtils.e("之前日期:"+time+"=="+timeBefor);
- // LogUtils.e("当前日期:"+now+"=="+timeNow);
- curDate = DateUtil.strToCalendar(time, Constant.TFORMATE_YMD);
- dateFromServer = DateUtil.strToDate(time, Constant.TFORMATE_YMD);
- }
- private void init(Context context) {
- bindView(context);
- renderCalendar();
- }
- private void bindView(Context context) {
- View view = LayoutInflater.from(context).inflate(R.layout.appoint_calendarview, this, false);
- title = (TextView) view.findViewById(R.id.calendar_title);
- title.setTextColor(titleColor);
- title.setTextSize(titleSize);
- layout_calendar_gonext = view.findViewById(R.id.layout_calendar_gonext);
- layout_calendar_goup = view.findViewById(R.id.layout_calendar_goup);
- layout_calendar_gonext.setOnClickListener(this);
- layout_calendar_goup.setOnClickListener(this);
- recyclerView = (RecyclerView) view.findViewById(R.id.calendar_rv);
- linearLayoutManager = new LinearLayoutManager(this.context, LinearLayoutManager.HORIZONTAL, false);
- recyclerView.setLayoutManager(linearLayoutManager);
- PagerSnapHelper snapHelper = new PagerSnapHelper();
- snapHelper.attachToRecyclerView(recyclerView);
- addView(view);
- }
- public void renderCalendar() {
- months.clear();
- initTime();
- for (int i = 0; i < maxSelect; i++) {
- ArrayList<Date> cells = new ArrayList<>();
- if (i != 0) {
- curDate.add(Calendar.MONTH, 1);//后推一个月
- } else {
- curDate.add(Calendar.MONTH, 0);//当前月
- }
- Calendar calendar = (Calendar) curDate.clone();
- //将日历设置到当月第一天
- calendar.set(Calendar.DAY_OF_MONTH, 1);
- //获得当月第一天是星期几,如果是星期一则返回1此时1-1=0证明上个月没有多余天数
- int prevDays = calendar.get(Calendar.DAY_OF_WEEK) - 1;
- //将calendar在1号的基础上向前推prevdays天。
- calendar.add(Calendar.DAY_OF_MONTH, -prevDays);
- //最大行数是6*7也就是,1号正好是星期六时的情况
- int maxCellcount = 6 * 7;
- while (cells.size() < maxCellcount) {
- cells.add(calendar.getTime());
- //日期后移一天
- calendar.add(calendar.DAY_OF_MONTH, 1);
- }
- months.add(new CalendarCell(i, cells));
- }
- for (int i = 0; i < months.size(); i++) {
- //title格式 2018年6月3日
- String title = (months.get(i).getCells().get(20).getYear() + 1900) +
- "\t-\t" +
- (months.get(i).getCells().get(20).getMonth() + 1);
- titles.add(title);
- }
- title.setText(titles.get(maxSelect-1));
- //只限定3个月,因此模拟给3个数值即可
- mainAdapter = new MainRvAdapter(R.layout.appoint_calendarview_item, months);
- recyclerView.setAdapter(mainAdapter);
- //recyclerview 的滚动监听
- recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
- @Override
- public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
- title.setText(titles.get(linearLayoutManager.findLastVisibleItemPosition()));
- super.onScrollStateChanged(recyclerView, newState);
- }
- });
- recyclerView.scrollToPosition(maxSelect-1);
- }
- @Override
- public void onClick(View v) {
- int index = linearLayoutManager.findLastVisibleItemPosition();
- LogUtils.e("当前项"+index);
- switch (v.getId()){
- case R.id.layout_calendar_gonext:
- if(index < maxSelect-1){
- recyclerView.scrollToPosition(index+1);
- title.setText(titles.get(index+1));
- }
- break;
- case R.id.layout_calendar_goup:
- if(index > 0){
- recyclerView.scrollToPosition(index-1);
- title.setText(titles.get(index-1));
- }
- break;
- }
- }
- /**
- * 最外层水平recyclerview的adapter
- */
- private class MainRvAdapter extends BaseQuickAdapter<CalendarCell, BaseViewHolder> {
- public MainRvAdapter(int layoutResId, @Nullable List<CalendarCell> data) {
- super(layoutResId, data);
- }
- @Override
- protected void convert(BaseViewHolder helper, final CalendarCell item) {
- if (((RecyclerView) helper.getView(R.id.appoint_calendarview_item_rv)).getLayoutManager() == null) {
- //RecyclerView不能都使用同一个LayoutManager
- GridLayoutManager manager = new GridLayoutManager(mContext, 7);
- //recyclerview嵌套高度不固定(wrap_content)时必须setAutoMeasureEnabled(true),否则测量时控件高度为0
- manager.setAutoMeasureEnabled(true);
- ((RecyclerView) helper.getView(R.id.appoint_calendarview_item_rv)).setLayoutManager(manager);
- }
- SubRvAdapter subRvAdapter = null;
- if (allAdapters.get(helper.getPosition()) == null) {
- subRvAdapter = new SubRvAdapter(R.layout.calendar_text_day, item.getCells());
- allAdapters.put(helper.getPosition(), subRvAdapter);
- ((RecyclerView) helper.getView(R.id.appoint_calendarview_item_rv)).setAdapter(subRvAdapter);
- } else {
- subRvAdapter = allAdapters.get(helper.getPosition());
- ((RecyclerView) helper.getView(R.id.appoint_calendarview_item_rv)).setAdapter(subRvAdapter);
- }
- //item 点击事件响应
- subRvAdapter.setOnItemClickListener(new OnItemClickListener() {
- @Override
- public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
- Date date = item.getCells().get(position);
- if(date.getTime() >= timeBefor && date.getTime()<= timeNow ){
- if (isSelectingSTime) {
- //正在选择开始时间
- selectSDate(item.getCells().get(position));
- } else {
- //正在选择结束时间
- selectEDate(item.getCells().get(position));
- }
- }
- //更新所有的adapter,比如今天6月,需要更新6、7、8三个月份不同adapter
- Iterator iterator = allAdapters.entrySet().iterator();
- while (iterator.hasNext()) {
- Map.Entry entry = (Map.Entry) iterator.next();
- ((SubRvAdapter) entry.getValue()).notifyDataSetChanged();
- }
- }
- });
- }
- }
- public void selectSDate(Date date) {
- if (sDateTime != null && eDateTime != null) {
- sDateTime = date;
- notifyDateSelectChanged();
- } else {
- sDateTime = date;
- notifyDateSelectChanged();
- }
- eDateTime = null;
- isSelectingSTime = false;
- /** 当前没有选择结束时间*/
- if(this.calendaSelListener != null){
- calendaSelListener.selectStatus(false);
- }
- }
- public void selectEDate(Date date) {
- if (sDateTime != null) {
- if (date.getTime() >= sDateTime.getTime()) {
- eDateTime = date;
- isSelectingSTime = true;
- notifyDateSelectChanged();
- }else {
- eDateTime = sDateTime;
- sDateTime = date;
- isSelectingSTime = true;
- notifyDateSelectChanged();
- }
- /** 选择完成*/
- if(this.calendaSelListener != null){
- calendaSelListener.selectStatus(true);
- }
- }
- }
- /**
- * 通知开始时间跟结束时间均改变
- */
- public void notifyDateSelectChanged() {
- if (mETimeSelectListener != null && eDateTime != null) {
- mETimeSelectListener.onETimeSelect(eDateTime);
- }
- if (mSTimeSelectListener != null && sDateTime != null) {
- mSTimeSelectListener.onSTimeSelect(sDateTime);
- }
- }
- private class SubRvAdapter extends BaseQuickAdapter<Date, BaseViewHolder> {
- public SubRvAdapter(int layoutResId, @Nullable List<Date> data) {
- super(layoutResId, data);
- }
- @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
- @Override
- protected void convert(BaseViewHolder helper, Date date) {
- helper.setIsRecyclable(false);//不让recyclerview进行复用,复用会出问题
- ((CalendarDayTextView) helper.getView(R.id.calendar_day_tv)).setEmptyColor(todayEmptyColor);
- ((CalendarDayTextView) helper.getView(R.id.calendar_day_tv)).setFillColor(todayFillColor);
- int day = date.getDate();
- //设置文本
- ((CalendarDayTextView) helper.getView(R.id.calendar_day_tv)).setText(String.valueOf(day));
- //设置颜色
- if(date.getTime() >= timeBefor && date.getTime()<= timeNow ){
- ((CalendarDayTextView) helper.getView(R.id.calendar_day_tv)).setTextColor(enableSelectColor);
- }else {
- ((CalendarDayTextView) helper.getView(R.id.calendar_day_tv)).setTextColor(disableSeletColor);
- }
- //更改选中文字颜色
- if(sDateTime != null && eDateTime != null){
- if(date.getTime()>sDateTime.getTime() && date.getTime()<eDateTime.getTime()){
- ((CalendarDayTextView) helper.getView(R.id.calendar_day_tv)).isSelected(true);
- helper.getView(R.id.calendar_day_rl).setBackgroundColor(getResources().getColor(R.color.date_duration_bg));
- }
- }
- /****************************/
- if (eDateTime != null && date.getTime() == eDateTime.getTime()) {
- //结束时间
- if(eDateTime.equals(sDateTime)){
- ((CalendarDayRelativeLayout) helper.getView(R.id.calendar_day_rl)).isSameDay();
- }else {
- ((CalendarDayRelativeLayout) helper.getView(R.id.calendar_day_rl)).isETime(true);
- }
- ((CalendarDayTextView) helper.getView(R.id.calendar_day_tv)).isETime(true);
- }
- if (sDateTime != null && date.getTime() == sDateTime.getTime()) {
- //开始时间
- if (eDateTime != null) {
- if(eDateTime.equals(sDateTime)) {
- ((CalendarDayRelativeLayout) helper.getView(R.id.calendar_day_rl)).isSameDay();
- }else {
- ((CalendarDayRelativeLayout) helper.getView(R.id.calendar_day_rl)).isSTime(true);
- }
- ((CalendarDayTextView) helper.getView(R.id.calendar_day_tv)).isSTime(true);
- } else {
- ((CalendarDayRelativeLayout) helper.getView(R.id.calendar_day_rl)).isDurationSun(true);
- ((CalendarDayTextView) helper.getView(R.id.calendar_day_tv)).isSTime(true);
- }
- }
- /*****************************************/
- if(date.getTime() == timeNow){
- ((CalendarDayTextView) helper.getView(R.id.calendar_day_tv)).setToday(true);
- }
- }
- }
- private class CalendarCell {
- private int position;
- ArrayList<Date> cells;
- public CalendarCell(int position, ArrayList<Date> cells) {
- this.position = position;
- this.cells = cells;
- }
- public int getPosition() {
- return position;
- }
- public void setPosition(int position) {
- this.position = position;
- }
- public ArrayList<Date> getCells() {
- return cells;
- }
- public void setCells(ArrayList<Date> cells) {
- this.cells = cells;
- }
- }
- //开始时间的选择监听
- public interface CalendarSTimeSelListener {
- void onSTimeSelect(Date date);
- }
- private CalendarSTimeSelListener mSTimeSelectListener;
- public void setSTimeSelListener(CalendarSTimeSelListener li) {
- mSTimeSelectListener = li;
- }
- //结束时间的监听事件
- public interface CalendatEtimSelListener {
- void onETimeSelect(Date date);
- }
- private CalendaSelListener calendaSelListener;
- /**选择日期完整性*/
- public interface CalendaSelListener{
- void selectStatus(boolean isOk);
- }
- public void setCalendaSelListener(CalendaSelListener calendaSelListener) {
- this.calendaSelListener = calendaSelListener;
- }
- private CalendatEtimSelListener mETimeSelectListener;
- public void setETimeSelListener(CalendatEtimSelListener li) {
- mETimeSelectListener = li;
- }
- }
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_marginTop="15dp"
- android:orientation="vertical">
-
- <RelativeLayout
- android:layout_width="match_parent"
- android:layout_height="20dp"
- android:gravity="center_vertical"
- android:orientation="horizontal">
- <TextView
- android:id="@+id/calendar_title"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerInParent="true"
- android:text="2018年"
- android:textColor="@color/text_lable"
- android:textSize="15dp"/>
- <RelativeLayout
- android:id="@+id/layout_calendar_gonext"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:layout_alignParentRight="true"
- android:paddingLeft="15dp"
- android:paddingRight="15dp"
- >
- <ImageView
- android:layout_width="10dp"
- android:layout_height="10dp"
- android:layout_centerVertical="true"
- android:src="@mipmap/icon_arrow_right" />
- </RelativeLayout>
- <RelativeLayout
- android:id="@+id/layout_calendar_goup"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:paddingLeft="15dp"
- android:paddingRight="15dp"
- >
- <ImageView
- android:layout_width="10dp"
- android:layout_height="10dp"
- android:layout_centerVertical="true"
- android:src="@mipmap/icon_back_black" />
- </RelativeLayout>
-
- </RelativeLayout>
-
- <LinearLayout
- android:id="@+id/calendar_week_header"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="15dp"
- android:gravity="center_vertical"
- android:orientation="horizontal"
- >
- <TextView
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:layout_weight="1"
- android:text="@string/sun"
- android:textAlignment="center"
- android:textColor="#555"
- android:textSize="13dp" />
-
- <TextView
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:layout_weight="1"
- android:text="@string/mon"
- android:textAlignment="center"
- android:textColor="#555"
- android:textSize="13dp" />
-
- <TextView
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:layout_weight="1"
- android:text="@string/tue"
- android:textAlignment="center"
- android:textColor="#555"
- android:textSize="13dp" />
-
- <TextView
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:layout_weight="1"
- android:text="@string/wed"
- android:textAlignment="center"
- android:textColor="#555"
- android:textSize="13dp" />
-
- <TextView
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:layout_weight="1"
- android:text="@string/thu"
- android:textAlignment="center"
- android:textColor="#555"
- android:textSize="13dp" />
-
- <TextView
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:layout_weight="1"
- android:text="@string/fri"
- android:textAlignment="center"
- android:textColor="#555"
- android:textSize="13dp" />
-
- <TextView
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:layout_weight="1"
- android:text="@string/sat"
- android:textAlignment="center"
- android:textColor="#555"
- android:textSize="13dp" />
- </LinearLayout>
-
- <android.support.v7.widget.RecyclerView
- android:id="@+id/calendar_rv"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="10dp"
- android:overScrollMode="never"
- />
- </LinearLayout>
- import android.content.Context;
- import android.graphics.Color;
- import android.os.Build;
- import android.support.annotation.RequiresApi;
- import android.util.AttributeSet;
- import android.widget.RelativeLayout;
-
-
- public class CalendarDayRelativeLayout extends RelativeLayout {
- public CalendarDayRelativeLayout(Context context) {
- this(context, null);
- }
-
- public CalendarDayRelativeLayout(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
- public void isDurationSat(boolean isSaturday) {
- this.setBackground(getResources().getDrawable(R.drawable.appoint_calendar_sat_bg));
- }
-
- @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
- public void isDurationSun(boolean isSunday) {
- this.setBackground(getResources().getDrawable(R.drawable.appoint_calendar_sun_bg));
- }
- @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
- public void isETime(boolean etime) {
- // this.setBackgroundResource(getResources().getDrawable(R.drawable.));
-
- this.setBackground(getResources().getDrawable(R.drawable.appoint_calendar_sat_bg));
- }
- @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
- public void isSTime(boolean stime) {
- // this.setBackground(getResources().getDrawable(R.mipmap.appoint_calendar_start_bg));
- this.setBackground(getResources().getDrawable(R.drawable.appoint_calendar_sun_bg));
- }
-
- /**
- * 同一天
- * */
- @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
- public void isSameDay(){
- this.setBackground(getResources().getDrawable(R.drawable.appoint_calendar_same_bg));
- }
- }
- import android.content.Context;
- import android.graphics.Canvas;
- import android.graphics.Color;
- import android.graphics.Paint;
- import android.graphics.Typeface;
- import android.util.AttributeSet;
-
- /**
- * @Description: 日历内日期
- * @Author MengXY
- * @Date 2019/1/8
- */
- public class CalendarDayTextView extends android.support.v7.widget.AppCompatTextView {
- public boolean isToday;
- private boolean isSTime;
- private boolean isETime;
- private Context context;
- public void setEmptyColor(int emptyColor) {
- this.emptyColor = emptyColor;
- }
- public void setFillColor(int fillColor) {
- this.fillColor = fillColor;
- }
- private int emptyColor = Color.parseColor("#00ff00");
- private int fillColor = Color.parseColor("#00ff00");
- private Paint mPaintSTime;
- private Paint mPaintETime;
-
- public CalendarDayTextView(Context context) {
- super(context);
- initview(context);
- }
- public CalendarDayTextView(Context context, AttributeSet attrs) {
- super(context, attrs);
- initview(context);
- }
- private void initview(Context context) {
- this.context=context;
- // mPaintSTime = new Paint(Paint.ANTI_ALIAS_FLAG);
- // mPaintSTime.setStyle(Paint.Style.FILL);
- // mPaintSTime.setColor(context.getResources().getColor(R.color.date_time_bg));
- // mPaintSTime.setStrokeWidth(2);
- //
- // mPaintETime = new Paint(Paint.ANTI_ALIAS_FLAG);
- // mPaintETime.setStyle(Paint.Style.FILL);
- // mPaintETime.setColor(context.getResources().getColor(R.color.date_time_bg));
- // mPaintETime.setStrokeWidth(2);
- }
- @Override
- protected void onDraw(Canvas canvas) {
- //根据当前逻辑开始时间必须先绘制结束时间
- // if (isETime) {
- // canvas.save();
- // //移动到当前控件的中心,以中心为圆点绘制实心圆
- // canvas.translate(getWidth() / 2, getHeight() / 2);
- // canvas.drawCircle(0, 0, getWidth() / 2 , mPaintETime);
- // canvas.restore();
- // //此处必须将圆移动回开始位置,否则文本显示会受到影响
- // canvas.translate(0, 0);
- // }
- //
- // if (isSTime) {
- // canvas.save();
- // //移动到当前控件的中心,以中心为圆点绘制实心圆
- // canvas.translate(getWidth() / 2, getHeight() / 2);
- // canvas.drawCircle(0, 0, getWidth() / 2 , mPaintSTime);
- // canvas.restore();
- // //此处必须将圆移动回开始位置,否则文本显示会受到影响
- // canvas.translate(0, 0);
- // }
- super.onDraw(canvas);
- }
- public void setToday(boolean today) {
- isToday = today;
- this.setTextColor(context.getResources().getColor(R.color.text_main_tab_select));
- }
- public void isETime(boolean etime) {
- isETime = etime;
- // this.setTextColor(context.getResources().getColor(R.color.date_time_tv));
- // this.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
- isSelected(true);
- }
- public void isSTime(boolean stime) {
- isSTime = stime;
- isSelected(true);
- // this.setTextColor(context.getResources().getColor(R.color.date_time_tv));
- // this.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
- }
-
- public void isSelected(boolean isSelcted){
- if(isSelcted){
- this.setTextColor(context.getResources().getColor(R.color.date_time_tv));
- this.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
- }else {
- this.setTextColor(context.getResources().getColor(R.color.text_lable));
- }
- }
- }
- <?xml version="1.0" encoding="utf-8"?>
- <android.support.v7.widget.RecyclerView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/appoint_calendarview_item_rv"
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
-
- </android.support.v7.widget.RecyclerView>
- <?xml version="1.0" encoding="utf-8"?>
- <com.包名.CalendarDayRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="44dp"
- android:gravity="center"
- android:id="@+id/calendar_day_rl"
- android:layout_marginTop="5dp"
- android:layout_marginBottom="5dp"
- >
- <com..包名.CalendarDayTextView
- android:id="@+id/calendar_day_tv"
- android:layout_width="44dp"
- android:layout_height="44dp"
- android:layout_centerInParent="true"
- android:gravity="center"
- android:textColor="@color/white"
- android:text="31"
- android:includeFontPadding="false"
- android:textSize="13dp"/>
- </com..包名.CalendarDayRelativeLayout>
- import java.sql.Timestamp;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.Calendar;
- import java.util.Date;
-
- public class DateUtil {
- //Calendar 转化 String
- public static String calendarToStr(Calendar calendar,String format) {
- // Calendar calendat = Calendar.getInstance();
- SimpleDateFormat sdf = new SimpleDateFormat(format);
- return sdf.format(calendar.getTime());
- }
-
- //String 转化Calendar
- public static Calendar strToCalendar(String str,String format) {
- // String str = "2012-5-27";
- SimpleDateFormat sdf = new SimpleDateFormat(format);
- Date date = null;
- Calendar calendar = null;
- try {
- date = sdf.parse(str);
- calendar = Calendar.getInstance();
- calendar.setTime(date);
- } catch (ParseException e) {
- e.printStackTrace();
- }
- return calendar;
- }
-
- // Date 转化String
- public static String dateTostr(Date date,String format) {
- SimpleDateFormat sdf = new SimpleDateFormat(format);
- // String dateStr = sdf.format(new Date());
- String dateStr = sdf.format(date);
- return dateStr;
- }
-
- // String 转化Date
- public static Date strToDate(String str,String format) {
- SimpleDateFormat sdf = new SimpleDateFormat(format);
- Date date = null;
- try {
- date = sdf.parse(str);
- } catch (ParseException e) {
- e.printStackTrace();
- }
- return date;
- }
-
- //Date 转化Calendar
- public static Calendar dateToCalendar(Date date) {
- Calendar calendar = Calendar.getInstance();
- calendar.setTime(date);
- return calendar;
- }
-
- //Calendar转化Date
- public static Date calendarToDate(Calendar calendar) {
- return calendar.getTime();
- }
-
- // String 转成 Timestamp
- public static Timestamp strToTimeStamp(String str) {
- // Timestamp ts = Timestamp.valueOf("2012-1-14 08:11:00");
- return Timestamp.valueOf(str);
- }
-
- //Date 转 TimeStamp
- public static Timestamp dateToTimeStamp(Date date,String format) {
- SimpleDateFormat df = new SimpleDateFormat(format);
- String time = df.format(new Date());
- Timestamp ts = Timestamp.valueOf(time);
- return ts;
- }
- }
- <shape xmlns:android="http://schemas.android.com/apk/res/android">
- <corners android:topRightRadius="44dp" android:bottomRightRadius="44dp"/>
- <size android:height="44dp"/>
- <solid android:color="#41D2C4"/>
- </shape>
- <shape xmlns:android="http://schemas.android.com/apk/res/android">
- <corners
- android:bottomLeftRadius="44dp"
- android:topLeftRadius="44dp" />
- <size android:height="44dp" />
- <solid android:color="#41D2C4" />
- </shape>
- <?xml version="1.0" encoding="utf-8"?>
- <shape xmlns:android="http://schemas.android.com/apk/res/android" >
- <solid android:color="@color/date_duration_bg" />
- <corners android:radius="60dp" />
- </shape>
- <string name="sun">日</string>
- <string name="mon">一</string>
- <string name="tue">二</string>
- <string name="wed">三</string>
- <string name="thu">四</string>
- <string name="fri">五</string>
- <string name="sat">六</string>
-
- <color name="date_duration_bg">#41D2C4</color>
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:background="@color/white"
- android:orientation="vertical">
-
- <RelativeLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="40dp">
-
- <FrameLayout
- android:id="@+id/layout_line"
- android:layout_width="10dp"
- android:layout_height="1dp"
- android:layout_centerInParent="true"
- android:background="#35C1B5" />
- <TextView
- android:id="@+id/tv_startime"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_toLeftOf="@+id/layout_line"
- android:layout_marginRight="22.5dp"
- android:textColor="#35C1B5"
- android:textSize="14dp"
- android:text="@string/starTime"
- />
- <TextView
- android:id="@+id/tv_endtime"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_toRightOf="@+id/layout_line"
- android:layout_marginLeft="22.5dp"
- android:textColor="#35C1B5"
- android:textSize="14dp"
- android:text="@string/endTime"
- />
- </RelativeLayout>
- <FrameLayout
- android:layout_width="match_parent"
- android:layout_height="0.5dp"
- android:layout_marginTop="10dp"
- android:background="@color/bg_line"
- />
- <com.包名.CalendarView
- android:id="@+id/calendarview"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- app:titleColor = "@color/text_lable"
- />
- </LinearLayout>
- public class SelectTimeActivity extends BaseActivity {
-
- @BindView(R.id.tv_title)
- TextView tvTitle;
- @BindView(R.id.iv_title_back)
- ImageView ivTitleBack;
- @BindView(R.id.tv_title_left)
- TextView tvTitleLeft;
- @BindView(R.id.layout_title_left)
- RelativeLayout layoutTitleLeft;
- @BindView(R.id.tv_title_right)
- TextView tvTitleRight;
- @BindView(R.id.layout_title_right)
- RelativeLayout layoutTitleRight;
- @BindView(R.id.layout_line)
- FrameLayout layoutLine;
- @BindView(R.id.tv_startime)
- TextView tvStartime;
- @BindView(R.id.tv_endtime)
- TextView tvEndtime;
- @BindView(R.id.calendarview)
- CalendarView calendarview;
- private String starTime;
- private String endTime;
- private boolean isSelecgOk = false;
- @Override
- protected void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_selectdate);
- ButterKnife.bind(this);
- setStatusBar(true);
- initView();
- }
-
- private void initView() {
- tvTitle.setText(getString(R.string.selectTime));
- ivTitleBack.setVisibility(View.GONE);
- tvTitleLeft.setText(getString(R.string.cancel));
- tvTitleRight.setText(getString(R.string.confirm));
- calendarview.setETimeSelListener(new CalendarView.CalendatEtimSelListener() {
- @Override
- public void onETimeSelect(Date date) {
- if (date != null) {
- endTime = DateUtils.formatData(date, Constant.TFORMATE_YMD);
- tvEndtime.setText(endTime);
- }else {
- endTime = null;
- }
- }
- });
- calendarview.setSTimeSelListener(new CalendarView.CalendarSTimeSelListener() {
- @Override
- public void onSTimeSelect(Date date) {
- if (date != null) {
- starTime = DateUtils.formatData(date, Constant.TFORMATE_YMD);
- tvStartime.setText(starTime);
- }else {
- starTime = null;
- }
- }
- });
- calendarview.setCalendaSelListener(new CalendarView.CalendaSelListener() {
- @Override
- public void selectStatus(boolean isOk) {
- isSelecgOk = isOk;
- }
- });
- }
-
- @OnClick({R.id.tv_title_left, R.id.tv_title_right})
- public void onClick(View view) {
- switch (view.getId()) {
- case R.id.tv_title_left:
- finish();
- break;
- case R.id.tv_title_right:
- if(TextUtils.isEmpty(starTime)){
- ToastUtils.showToast(getString(R.string.history_alert1));
- return;
- }
- if(TextUtils.isEmpty(endTime) || !isSelecgOk){
- ToastUtils.showToast(getResources().getString(R.string.history_alert));
- return;
- }
- Intent intent = new Intent();
- intent.putExtra("starTime",starTime);
- intent.putExtra("endTime",endTime);
- setResult(RESULT_OK,intent);
- finish();
- break;
- }
- }
- }
implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30'
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。