Android周日历可滑动可选择日期

日历 android 周历,Android Studio 基础 之 获取系统Calendar 日历日程 (涉及指定日期时间判断是星期几的方法使用)的方法整理... Android Studio 基础 之 获取系统Calendar 日历日程 (涉及指定日期时间判断是星期几的方法使用)的方法整理目录Android Studio 基础 之 获取系统Calendar 日历日程 (涉及指定日期时间判断是星期几的方法使用)的方法整理一、简单介绍二、实现原理三、注意实现四、效果预览五、实现步骤六、关键代码一、简单介绍Android 开发中的一些基础操作,使用整理,便于后期... 阅读详情

实现思路:

周日历的左右滑动使用了ViewFlipper组件  调用addView(view,index)方法  这里的view  我用了GridView  配合GestureDetector类识别左右滑动的手势  默认显示本周的日期并选中当前这一天   

实现方法:

首先:获取当天日期

Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-d");
currentDate = sdf.format(date);
year_c = Integer.parseInt(currentDate.split("-")[0]);
month_c = Integer.parseInt(currentDate.split("-")[1]);
day_c = Integer.parseInt(currentDate.split("-")[2]);

通过获取到的年和月份  判断是否为闰年  这个月的天数 第一天为周几

public void getCalendar(int year, int month) {
isLeapyear = sc.isLeapYear(year); // 是否为闰年
daysOfMonth = sc.getDaysOfMonth(isLeapyear, month); // 某月的总天数
dayOfWeek = sc.getWeekdayOfMonth(year, month); // 某月第一天为星期几
}

判断这个月一共有几周

public int getWeeksOfMonth() {
int preMonthRelax = 0;
if (dayOfWeek != 7) {
preMonthRelax = dayOfWeek;
}
if ((daysOfMonth + preMonthRelax) % 7 == 0) {
weeksOfMonth = (daysOfMonth + preMonthRelax) / 7;
} else {
weeksOfMonth = (daysOfMonth + preMonthRelax) / 7 + 1;
}
return weeksOfMonth;
}

判断现在是第几周(周日算一周的开始)

if (dayOfWeek == 7) {
week_c = currentDay / 7 + 1;
} else {
if (currentDay <= (7 - dayOfWeek)) {
week_c = 1;
} else {
if ((currentDay - (7 - dayOfWeek)) % 7 == 0) {
week_c = (currentDay - (7 - dayOfWeek)) / 7 + 1;
} else {
week_c = (currentDay - (7 - dayOfWeek)) / 7 + 2;
}
}
}

计算当前的年月日

public void getCurrent() {
if (currentWeek > currentNum) {
if (currentMonth + 1 <= 12) {
currentMonth++;
} else {
currentMonth = 1;
currentYear++;
}
currentWeek = 1;
currentNum = getWeeksOfMonth(currentYear, currentMonth);
} else if (currentWeek == currentNum) {
if (getLastDayOfWeek(currentYear, currentMonth) == 6) {
} else {
if (currentMonth + 1 <= 12) {
currentMonth++;
} else {
currentMonth = 1;
currentYear++;
}
currentWeek = 1;
currentNum = getWeeksOfMonth(currentYear, currentMonth);
}
} else if (currentWeek < 1) {
if (currentMonth - 1 >= 1) {
currentMonth--;
} else {
currentMonth = 12;
currentYear--;
}
currentNum = getWeeksOfMonth(currentYear, currentMonth);
currentWeek = currentNum - 1;
}
}

加载GridView

private void addGridView() {
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
gridView = new GridView(this);
gridView.setNumColumns(7);
gridView.setGravity(Gravity.CENTER_VERTICAL);
gridView.setSelector(new ColorDrawable(Color.TRANSPARENT));
gridView.setVerticalSpacing(1);
gridView.setHorizontalSpacing(1);
gridView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return MySchedulingActivity.this.gestureDetector.onTouchEvent(event);
}
});

gridView.setLayoutParams(params);

可设置点击事件
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Log.i(TAG, "day:" + dayNumbers[position]);
selectPostion = position;
dateAdapter.setSeclection(position);
dateAdapter.notifyDataSetChanged();
tv_date.setText(dateAdapter.getCurrentYear(selectPostion) + "-"
+ dateAdapter.getCurrentMonth(selectPostion) + "-"
+ dayNumbers[position] );
tvtime = tv_date.getText()+"";
tvtime = DateUtils.getDateStrFormat(tvtime);
Log.d("tvtime",tvtime+"------");
}


最后 可以设置日历的左右滑动

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
int gvFlag = 0;
if (e1.getX() - e2.getX() > 80) {
// 向左滑
addGridView();
currentWeek++;
getCurrent();
dateAdapter = new DateAdapter(this, currentYear, currentMonth,
currentWeek, currentWeek == 1 ? true : false);
dayNumbers = dateAdapter.getDayNumbers();
gridView.setAdapter(dateAdapter);
tv_date.setText(dateAdapter.getCurrentYear(selectPostion) + "-"
+ dateAdapter.getCurrentMonth(selectPostion) + "-"
+ dayNumbers[selectPostion] );

gvFlag++;
flipper1.addView(gridView, gvFlag);
dateAdapter.setSeclection(selectPostion);
this.flipper1.setInAnimation(AnimationUtils.loadAnimation(this,
R.anim.push_left_in));
this.flipper1.setOutAnimation(AnimationUtils.loadAnimation(this,
R.anim.push_left_out));
this.flipper1.showNext();
flipper1.removeViewAt(0);
tvtime = tv_date.getText()+"";
tvtime = DateUtils.getDateStrFormat(tvtime);
return true;

} else if (e1.getX() - e2.getX() < -80) {
addGridView();
currentWeek--;
getCurrent();
dateAdapter = new DateAdapter(this, currentYear, currentMonth,
currentWeek, currentWeek == 1 ? true : false);
dayNumbers = dateAdapter.getDayNumbers();
gridView.setAdapter(dateAdapter);
tv_date.setText(dateAdapter.getCurrentYear(selectPostion) + "-"
+ dateAdapter.getCurrentMonth(selectPostion) + "-"
+ dayNumbers[selectPostion] );


gvFlag++;
flipper1.addView(gridView, gvFlag);
dateAdapter.setSeclection(selectPostion);
this.flipper1.setInAnimation(AnimationUtils.loadAnimation(this,
R.anim.push_right_in));
this.flipper1.setOutAnimation(AnimationUtils.loadAnimation(this,
R.anim.push_right_out));
this.flipper1.showPrevious();
flipper1.removeViewAt(0);
int i = 0;
tvtime
return true;
}
return false;
}


效果图



Android周选择日历的实现 一款周选择日历的实现。效果如GIF图:由于颜色相近GIF录制吧我选择的背景快和谐掉了,其实选中的周有圆角个背景块的。代码链接在下面喜欢可以点个star好久没更文了也对大家表示歉意,最近公司人员变动,事情像山一样压过来,也怪自己心态问题,所以一直没有抽出空写出干货。日期选择日历,月选择日历,开源的比较多也比较常见,但是周选择日历,我前几天是没找到符合要求的。所有自己操刀砍出一个轮子来。使用已经加入ji 阅读详情

相关推荐

推荐一款第三方的日历框架------CalendarView

Android上一个优雅、高度自定义、性能高效的日历控件,完美支持周视图,支持标记、自定义颜色、农历等,任意控制月视图显示、任意日期拦截条件、自定义周起始等。Canvas绘制,极速性能、占用内存低,支持简单定制即可实现任意自定义布局、自定义UI,支持收缩展开、性能非常高效, 这个控件内存和效率优势相当明显,而且真正做到收缩+展开,适配多种场景,支持同时多种颜色标记日历事务,支持多点触控,你真的想不到日历还可以如此优雅!继承自己的月视图和周视图,只需要依次实现onDrawText。

fromVillageCoolBoy的博客 5171

Android日历周视图 可添加事件标记

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 and

huohacker的专栏 4697

单行横向滑动的日历控件

单行横向滑动的日历控件,可设置起始结束日期

android 日历 周显示,按周显示的日历和按月显示的日历,你需要吗

周日历 使用布局:android:id="@+id/week_calendar"android:layout_width="match_parent"android:layout_height="wrap_content"app:wc_headerBgColor="#ccc"app:wc_headerHeight="60dp"app:wc_calendarHeight="55dp" />代码...

weixin_39628594的博客 1177

Android炫酷的星期日期选择控件RollWeekView

Android自定义星期日期控件,点击某个日期后,滑动到中间并放大效果

Android横向滑动日历

本例子是单行横向滑动日历,只显示一行日历,利用ViewFlipper动态添加和删除GridView达到资源合理利用,滑动过程顺畅

Android 日历-周视图

/ 注意:月份是从0开始的。System.out.println("你输入的月份不再范围内,请重新输入!week = "星期一";week = "星期二";week = "星期三";week = "星期四";week = "星期五";week = "星期六";week = "星期日";//基姆拉尔森计算公式根据日期判断星期几。// 获取未来一星期内的日期集合。

qq_33209777的博客 880

android实现切换日期左右无限滑动效果

本篇内容给大家分享了android开发时候实现自定义的日期无限左右滑动效果以及控件使用的技巧。

一款安卓日历(一)

一款安卓日历,包含周日历、月日历以及滑动切换视图

necer的博客 1万+

android项目代码-日历(公历、农历、周日历、月日历等)

android项目代码-日历(公历、农历、周日历、月日历等)

单片机入门说明书:从本质到架构,一文看透MCU核心原理

其实你每天用的洗衣机、刷的智能门锁、开的汽车里,都藏着它的身影。相当于工厂里的“运输轨道”,CPU算出的结果通过总线送到RAM存储,ROM里的程序通过总线传给CPU执行,外设的信号通过总线交给CPU处理,整个过程每秒能重复上百万次,确保各模块协同高效。高端单片机(比如STM32F4系列)还会配备DMA(直接存储器访问)单元,相当于“专用传送带”——不需要CPU干预,就能直接让外设和RAM之间传输数据(比如让ADC采集的温度数据直接存进RAM),大大降低CPU负担,让CPU能专注处理更重要的任务。

IAMIF12的博客 1038

android 自定义周日历,CalendarView

CalenderViewAndroid上一个非常优雅、高度自定义、性能高效的日历控件,完美支持周视图,支持标记、自定义颜色、农历等,任意控制月视图显示、任意日期拦截条件、自定义周起始等。Canvas绘制,极速性能、占用内存低,,支持简单定制即可实现任意自定义布局、自定义UI,支持收缩展开、性能非常高效,这个控件内存和效率优势相当明显,而且真正做到收缩+展开,适配多种场景,支持同时多种颜色标记日历事...

weixin_36313743的博客 1167

手把手教你用VSCode+SDL在Ubuntu上跑LVGL8.2模拟器(附插件清单)

本文详细介绍了在Ubuntu系统上使用VSCode和SDL库搭建LVGL8.2模拟器环境的完整流程,特别适合嵌入式开发者(如全志F1C100s平台)进行UI设计验证。从环境配置、项目编译到VSCode深度集成,提供了实用技巧和常见问题解决方案,帮助开发者实现'先模拟后真机'的高效开发模式。

weixin_33737134的博客 355

android自定义滑动日历,GitHub - poovarasanvasudevan/SuperCalendar: @Deprecated android 自定义日历控件 支持左右无限滑动 周月切...

看到本篇文章的同学估计也是实验课或者项目需求中需要一个日历表,当我接到这个需求的时候,当时脑子压根连想都没想,这么通用的控件,GitHub上一搜一大堆不是嘛。可是等到真正做起来的时候,扎心了老铁,GitHub上的大神居然异常的不给力,都是实现了基本功能,能够滑动切换月份,找实现了周月切换功能的开源库很难。终于我费尽千辛万苦找到一个能够完美切换的项目时,你周月切换之后的数据乱的一塌糊涂啊!!!算了,...

weixin_39973416的博客 246

PMOS缓启动电路设计实战:用LTspice优化上电时序,把60A冲击降到15A

本文通过一个实战案例,深入解析了PMOS缓启动电路如何有效抑制上电冲击电流。文章指出,低ESR电容是导致冲击电流飙升的元凶,并详细阐述了利用LTspice仿真工具,通过优化栅极电阻和栅源电容等参数,将高达60A的冲击电流成功降至15A的设计与优化过程,为电源开关电路设计提供了可复用的方法论。

onion的博客 895

Nifi SNI 问题解决方案

Nifi 在配置 SSL 时,如果没有正确设置主机名(SNI),就会导致。为了解决这个问题,我们需要重新配置 Nifi 的 SSL 证书,并确保所有相关配置项(如服务器地址、证书路径和密码等)正确无误。以下是一个详细的解决步骤,以帮助你正确配置 Nifi 并解决 SNI 错误。文件中的配置项(如服务器地址、端口和证书路径),以及正确设置用户凭证。通过这些配置,你可以确保 Nifi 在支持 HTTPS 的同时,正确处理 SSL/TLS 的 SNI 问题。文件,配置服务器地址、端口以及证书路径和密码。

m0_58786911的博客 2295

Android绘制日历

项目中有时候会遇到需要自定义日历,然后再日历上显示当天是否有日程信息。 如图所示,我们需要先绘制出日历,然后再日历上有日程信息的地方标记小圆点,最后当日历上某一天被点击的时候需要提供一个回调方法,处理点击事件。一个月最多有31天,其中最多有4个整周(28天)刚好是当前月,剩下的的3天可能分布在其余两个月,所以我们日历需要绘制6行。首先求出当前月的第一天是星期几 需要注意的是这里的结果是从周日开始计算的从周日开始计算(日:1 一:2 二:3 三:4 四:5 五:6 六:7)然后根据计算出日历上需要显示上个

xiaokangss的博客 1343

DCDC系列(一): COT DCDC基本原理

电流环DCDC属于双环控制模式,根据电流检测的位置,分为峰值电流环控制模式、谷值电流环控制模式和平均电流环控制模式,主要由输出电压反馈环和电流环两个环路来实现控制,其瞬态响应比电压环更好,且有自动限流的功能,但仍需要斜坡补偿网络,且对噪声敏感。Stage3: 在下管NMOS打开阶段,由于后级负载此时间段内消耗的电量较少,所以VFB还未低至Vref,所以此阶段中,上管PMOS和下管NMOS均处于关断状态,此时的电感电流为0mA,此阶段测的VSW上的电压就是Cout上的电压VREG;

weixin_40073649的博客 3937

Android 日历控件WeekCalendar

Demo图 开源代码:https://github.com/nomanr/WeekCalendar 基于Android-studio开发的用Demo:http://download.youkuaiyun.com/download/qq_30552993/9495978 其中有几处需要注意的:app.build.gradle文件 minSdkVersion 14compile 'com.andr

无论何时都不要停止学习,这是改变自己的必要条件 2391

一文搞懂 JavaScript 模块化规范:CommonJS、AMD、ES6 Module

在现代 JavaScript 开发中,模块化是提升代码组织性和可维护性的关键。本文深入解析三种主流的模块化规范——CommonJS、AMD 和 ES6 Module。

Allen- 3477

发那科机器人通信库使用指南与踩坑记录

GitHubNuGet(如本文基于该库,在 C# / .NET 下通过 TCP 与 FANUC 机器人控制器通信,实现读当前位姿、PR 寄存器、以及 DI/DO/GI/GO 等 IO 的读写。GitHubNuGet(如本文基于该库,在 C# / .NET 下通过 TCP 与 FANUC 机器人控制器通信,实现读当前位姿、PR 寄存器、以及 DI/DO/GI/GO 等 IO 的读写。

songhuangong123的博客 322

layui totalRow 多层嵌套json_自定义 Behavior,实现嵌套滑动、平滑切换周月视图的日历...

使用 CoordinateLayout 可以协调它的子布局,实现滑动效果的联动,它的滑动效果由 Behavior 实现。以前用过小米日历,对它滑动平滑切换日月视图的效果印象深刻。本文尝试用自定义 Behavior 实现一个带有这种效果的日历。简介先上个小米日历的图,让大家知道要做一个什么效果:这是小米日历的效果,在用户操作列表的时候,将日历折叠成周视图,扩大列表的显示区域,同时也不影响日...

weixin_39525243的博客 409

桌面运维工程师面试题详解(一)

桌面运维工程师面试题详解(一)

jks212454的博客 1421

Android 自定义日历周视图

简版如下: 知识点:viewpager无限滑动、日期的计算、自定义day(每个单元格view) 以及week(每七个单元格) 自定义 day视图         主要绘制显示的天和小蓝点 package cn.edu.sxu.www.customercalendar; import android.content.Context; import a

huohacker的专栏 2967

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

纵享丝滑滑动切换的周月日历,水滴效果,丰富自定义日历样式,仿小米日历(ViewDragHelper实现)

最后这里放上我这段时间复习的资料,这个资料也是偶然一位朋友分享给我的,里面包含了腾讯、字节跳动、阿里、百度2020-2021面试真题解析,并且把每个技术点整理成了视频和PDF(知识脉络 + 诸多细节)。还有高级架构技术进阶脑图、高级进阶架构资料帮助大家学习提升进阶,这里我也免费分享给大家也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。一起互勉~,这里我也免费分享给大家也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

2401_86964146的博客 878

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

如何使用 iif 来判断日期是否为空

使用iif怎么判断显示的日期不可以为空,不可以为null,应为值为null会自动显示1900-01-01这个日期。所以不可以为null iif(,,) 如果iif(日期==1,日期,‘ ’) 则会报错。 1.如期time不可以转换成int类型 2.不可以为空值 ...

yshyangs的博客 1401

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

上一篇: Android中Webview与js交互
下一篇: Android 自定义评价Dialog(RatingBar的使用和EditText的剩余字数显示)
ayrascal
博客等级 码龄10年 8粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值