package cn.xiaoph.library.view;
import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
import android.annotation.SuppressLint;
import android.app.Dialog;
import android.content.Context;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import cn.xiaoph.library.R;
@SuppressLint("NewApi")
public class CustomDatePicker {
/**
* 定义结果回调接口
*/
public interface ResultHandler {
void handle(String time);
}
public enum SCROLL_TYPE {
HOUR(1),
MINUTE(2);
SCROLL_TYPE(int value) {
this.value = value;
}
public int value;
}
private int scrollUnits = SCROLL_TYPE.HOUR.value + SCROLL_TYPE.MINUTE.value;
private ResultHandler handler;
private Context context;
private boolean canAccess = false;
private Dialog datePickerDialog;
private DatePickerView year_pv, month_pv, day_pv, hour_pv, minute_pv;
private static final int MAX_MINUTE = 59;
private static final int MAX_HOUR = 23;
private static final int MIN_MINUTE = 0;
private static final int MIN_HOUR = 0;
private static final int MAX_MONTH = 12;
private ArrayList<String> year, month, day, hour, minute;
private int startYear, startMonth, startDay, startHour, startMinute, endYear, endMonth, endDay, endHour, endMinute;
private boolean spanYear, spanMon, spanDay, spanHour, spanMin;
private Calendar selectedCalender, startCalendar, endCalendar;
private TextView tv_cancle, tv_select, hour_text, minute_text;
private boolean monthClear, dayClear, hourClear, minClear;
public CustomDatePicker(Context context, ResultHandler resultHandler, String startDate, String endDate) {
if (isValidDate(startDate, "yyyy-MM-dd HH:mm") && isValidDate(endDate, "yyyy-MM-dd HH:mm")) {
canAccess = true;
this.context = context;
this.handler = resultHandler;
selectedCalender = Calendar.getInstance();
startCalendar = Calendar.getInstance();
endCalendar = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.CHINA);
try {
startCalendar.setTime(sdf.parse(startDate));
Date end = sdf.parse(endDate);
endCalendar.setTime(end);
} catch (ParseException e) {
e.printStackTrace();
}
initDialog();
initView();
}
}
private void initDialog() {
if (datePickerDialog == null) {
datePickerDialog = new Dialog(context, R.style.time_dialog);
datePickerDialog.setCancelable(false);
datePickerDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
datePickerDialog.setContentView(R.layout.custom_date_picker);
Window window = datePickerDialog.getWindow();
window.setGravity(Gravity.BOTTOM);
WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
manager.getDefaultDisplay().getMetrics(dm);
WindowManager.LayoutParams lp = window.getAttributes();
lp.width = dm.widthPixels;
window.setAttributes(lp);
}
}
private void initView() {
year_pv = (DatePickerView) datePickerDialog.findViewById(R.id.year_pv);
month_pv = (DatePickerView) datePickerDialog.findViewById(R.id.month_pv);
day_pv = (DatePickerView) datePickerDialog.findViewById(R.id.day_pv);
hour_pv = (DatePickerView) datePickerDialog.findViewById(R.id.hour_pv);
minute_pv = (DatePickerView) datePickerDialog.findViewById(R.id.minute_pv);
tv_cancle = (TextView) datePickerDialog.findViewById(R.id.tv_cancle);
tv_select = (TextView) datePickerDialog.findViewById(R.id.tv_select);
hour_text = (TextView) datePickerDialog.findViewById(R.id.hour_text);
minute_text = (TextView) datePickerDialog.findViewById(R.id.minute_text);
tv_cancle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
datePickerDialog.dismiss();
}
});
tv_select.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.CHINA);
handler.handle(sdf.format(selectedCalender.getTime()));
datePickerDialog.dismiss();
}
});
}
private void initParameter() {
startYear = startCalendar.get(Calendar.YEAR);
startMonth = startCalendar.get(Calendar.MONTH) + 1;
startDay = startCalendar.get(Calendar.DAY_OF_MONTH);
startHour = startCalendar.get(Calendar.HOUR_OF_DAY);
startMinute = startCalendar.get(Calendar.MINUTE);
endYear = endCalendar.get(Calendar.YEAR);
endMonth = endCalendar.get(Calendar.MONTH) + 1;
endDay = endCalendar.get(Calendar.DAY_OF_MONTH);
endHour = endCalendar.get(Calendar.HOUR_OF_DAY);
endMinute = endCalendar.get(Calendar.MINUTE);
spanYear = startYear != endYear;
spanMon = (!spanYear) && (startMonth != endMonth);
spanDay = (!spanMon) && (startDay != endDay);
spanHour = (!spanDay) && (startHour != endHour);
spanMin = (!spanHour) && (startMinute != endMinute);
selectedCalender.setTime(startCalendar.getTime());
}
private void initTimer() {
initArrayList();
if (spanYear) {
for (int i = startYear; i <= endYear; i++) {
year.add(String.valueOf(i));
}
for (int i = startMonth; i <= MAX_MONTH; i++) {
month.add(formatTimeUnit(i));
}
for (int i = startDay; i <= startCalendar.getActualMaximum(Calendar.DAY_OF_MONTH); i++) {
day.add(formatTimeUnit(i));
}
if ((scrollUnits & SCROLL_TYPE.HOUR.value) != SCROLL_TYPE.HOUR.value) {
hour.add(formatTimeUnit(startHour));
} else {
for (int i = startHour; i <= MAX_HOUR; i++) {
hour.add(formatTimeUnit(i));
}
}
if ((scrollUnits & SCROLL_TYPE.MINUTE.value) != SCROLL_TYPE.MINUTE.value) {
minute.add(formatTimeUnit(startMinute));
} else {
for (int i = startMinute; i <= MAX_MINUTE; i++) {
minute.add(formatTimeUnit(i));
}
}
} else if (spanMon) {
year.add(String.valueOf(startYear));
for (int i = startMonth; i <= endMonth; i++) {
month.add(formatTimeUnit(i));
}
for (int i = startDay; i <= startCalendar.getActualMaximum(Calendar.DAY_OF_MONTH); i++) {
day.add(formatTimeUnit(i));
}
if ((scrollUnits & SCROLL_TYPE.HOUR.value) != SCROLL_TYPE.HOUR.value) {
hour.add(formatTimeUnit(startHour));
} else {
for (int i = startHour; i <= MAX_HOUR; i++) {
hour.add(formatTimeUnit(i));
}
}
if ((scrollUnits & SCROLL_TYPE.MINUTE.value) != SCROLL_TYPE.MINUTE.value) {
minute.add(formatT
没有合适的资源?快使用搜索试试~ 我知道了~
基于andriod studio的时间管理app开发与设计 附2023年全新Andriod项目大全
共192个文件
java:69个
xml:66个
png:39个
需积分: 5 6 下载量 20 浏览量
2023-02-01
14:32:39
上传
评论 2
收藏 501KB ZIP 举报
温馨提示
Web端 后台前端:Layui, js , jQuery , css , html 后台框架:Spring boot , Spring Mvc , Mybatis Plus ,Shiro 数据库:Mysql5.7 APP客户端 前端框架:xml,LinearLayout,RelativeLayout 后台框架:OkHttp,fastjson 功能需求: 主要是通过制定周计划,在将周计划细至日计划,制定一天之内的任务开始与结束时间,并生成倒计时界面。在任务执行的过程中不可以使用其他手机娱乐app,如若使用,将直接开启应用锁功能,强制退出,返回到倒计时界面。 一:主功能: 学习任务记录和提醒功能:用户将自己每周的大概计划和每天的详细计划分别写到对应的模块内,可以设置任务开始的时间,到达指定时间时手机会通过震动提醒用户。(满足基本的 增 删 改 )。 二:应用锁功能 检测目标 app 启动时额外弹出一个界面把他覆盖。(指定的不可用的几个娱乐app,主要是获取权限进行强制关闭娱乐app)
资源推荐
资源详情
资源评论
收起资源包目录
基于andriod studio的时间管理app开发与设计 附2023年全新Andriod项目大全 (192个子文件)
gradlew.bat 2KB
build.gradle 1KB
build.gradle 1KB
settings.gradle 28B
project-manager.iml 12KB
app.iml 12KB
library.iml 11KB
project-mybatis.iml 11KB
myway.iml 585B
gradle-wrapper.jar 52KB
CustomDatePicker.java 28KB
TimeTableActivity.java 12KB
HomeActivity.java 11KB
ListPickerView.java 11KB
DatePickerView.java 11KB
Bimp.java 9KB
FirstBaseActivity.java 9KB
BaseActivity.java 9KB
BitmapType.java 8KB
SubjectRepertory.java 7KB
MyProcManager.java 6KB
IOUtils.java 5KB
AuthorityCodeGenerator.java 5KB
ConstraintActivity.java 5KB
Datetime.java 4KB
AddTimeTableActivity.java 4KB
MySubject.java 4KB
CustomListPicker.java 4KB
ResourcesUtil.java 3KB
WebHttpEngine.java 3KB
AccountValidatorUtil.java 3KB
ContentConfirmDialog.java 3KB
LoginActivity.java 3KB
FileUtils.java 3KB
ConfrimDialog.java 3KB
BaseApplication.java 3KB
CircleDrawable.java 3KB
CustomViewPager.java 2KB
RegisterActivity.java 2KB
UpdatePwdActivity.java 2KB
ProgressDialogHelper.java 2KB
UpdatePhoneActivity.java 2KB
UpdateEmailActivity.java 2KB
AppAdapter.java 2KB
ReturnResult.java 2KB
BasicsActivity.java 2KB
BasicsAdapter.java 1KB
SysUserInfoServiceImpl.java 1KB
SysUserBasicInfo.java 1KB
SysUserInfo.java 1KB
ViewFindUtils.java 1KB
ViewPagerForScrollView.java 1KB
TimetableInfo.java 1KB
CircleBitmapDisplayer.java 1KB
Initialization.java 950B
AppConstraint.java 924B
SysUserBasicInfoServiceImpl.java 868B
CustomListView.java 829B
CustomGridView.java 829B
MD5Util.java 779B
MessageActivity.java 777B
AppConstraintServiceImpl.java 638B
TimetableInfoServiceImpl.java 620B
ISysUserBasicInfoService.java 555B
ISysUserInfoService.java 532B
SysUserBasicInfoDao.java 504B
RequestToken.java 478B
ApiResources.java 447B
ProcessInfo.java 386B
AppInfo.java 380B
IAppConstraintService.java 366B
AppConstraintDao.java 362B
SysUserInfoDao.java 359B
ITimetableInfoService.java 348B
TimetableInfoDao.java 344B
IBasicsAdapter.java 311B
Application.java 267B
Callback.java 155B
LoginException.java 87B
bg_unloaded.jpg 53KB
bg_commodity_fragment.jpg 51KB
bg_commodity_loading.jpg 18KB
bg_broken.png 2.47MB
695554707018b0eab725f34025ebf85.png 99KB
33bea11b4f0c5ccb7a2494d99edfa45.png 38KB
icon_collection_empty.png 22KB
icon_logo_alipay.png 19KB
icon_logo_wechat.png 19KB
ic_launcher_round.png 14KB
ic_launcher.png 10KB
ic_launcher_round.png 10KB
ic_user_face.png 8KB
ic_launcher.png 8KB
ic_check_unfocused.png 6KB
ic_check_focused.png 6KB
ic_launcher_round.png 6KB
ic_launcher.png 5KB
ic_launcher_round.png 4KB
ic_back.png 4KB
ic_launcher.png 3KB
共 192 条
- 1
- 2
资源评论
sunboy227
- 粉丝: 60
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 5G网络基础培训课件.zip
- 2024-spring-HIT-CS-大作业
- yolo目标检测项目实验
- downloadFile-1.hc
- C++课程设计:基于Qt的航班信息管理系统
- ADS7822UVerilog驱动,前面传的有点问题
- 基于python的高性能爬虫程序,使用了多线程+缓存+xpath实现的,这里以彼-岸图库为例,实现,仅用于学习交流
- 中分辨率成像光谱仪(MODIS)烧毁面积产品信息MODIS-C6-BA-User-Guide-1.2.pdf
- Screenshot_20240427_172613_com.huawei.browser.jpg
- 关于学习Python的相关资源网站链接及相关介绍.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功