倒班班次计算器-android版

  假期还剩几天,大创项目文字部分进展不顺利,先提前弄下倒班班次计算器。
  之前曾经写过一个C语言的命令行执行计算器,写好了的计算方法和预设班次,基本上只能拿来自己用用,估计我妈拿这个算还不如自己掰下手指头数一下……
  这就给移植一下,到安卓平台,算是给我这个不务正业的程序猿练下手吧。
  (虽然估计这个练下手对我来讲也要脱层皮。。)

已完成部分和目标

  在命令行版本,依靠着设定magic number和简单switch就能够实现班次计算,但是没有图形界面,丑陋。
  放假前曾经有过尝试,将大致界面弄了出来,但是仍然是多个相同圈圈,并且或许在系统时间调用上不够稳定,运行不能够稳定显示班次。

目标一:稳定调用并总能够正确显示班次(调整系统时间来多次验证)

  之前思路是调用System的currentTimeMillis()来获取“当前时间距离1970.1.1凌晨时刻的毫秒数”,再通过除以86400000获取距离当前天数,最后减去1970.1.1距离标杆天(我这里使用的是2019.8.23 第一个零点)的天数(此处是18131)得出相对第一天的天数。
  后来怎样试,每次打开的结果都不一样,多次尝试后发现调用的这个方法似乎不可用,于是换成调用utils包的Date()获取标准时间戳(年月日时分秒),再使用Date.getTime()来转换成毫秒差,顺利通过!

目标二:将样式变得更加可读顺眼

  调整字体大小…嗯?Sat的周六显示不出来不是字体的问题?哦哦是自己case语句使用了1-7(愚蠢,0啊)那也得所有调整,本来字多就应该弄小一点,显得秀气,最好是控制在两行。
  换行操作?按照网上给的“
”(此处为英文分号),倒是挺像markdown语言中的特殊符号,但是没用。那就试试“\n”?
  (汗..)好吧最简单的最暴力,通过。
  去除标题栏,使用了

android:name
1
  (动态背景??应用图片??)

Error:Execution failed for task ‘:app:mergeDebugResources’.> Error:
java.util.concurrent.ExecutionException:
com.android.ide.common.process.ProcessException:

1
2
3
4
5
6
7
8
  问题在于:.9图片位置放错了(Androidstudio严格审查png图片),首先不能是自己手动jpg改png!!其次放置位置也有特殊限定!!最后命名格式也必须要规范!!!(AS管的倒是真宽..不过这样是规范)  
***可读做到了,但是顺眼还差的太远!!未全部完成***
### 目标三:实现左侧边栏拉动出一半,对软件进行设置
  左侧边栏在看后发现要使用到view部分,我个人有些不理解机制。
  索性先把右侧的日历页面和主页面滑动切换activity做了吧。其中滚动机制有的介绍使用GestureListener,有的则是直接viewGroup?
  有点晕菜,先试验了下activity中,anim的overridePendingTransition,是自动生成的补间动画,利用了点击测试,通过。
  (找不到R.anim文件夹,是因为按照网上教程放错了位置,应该放到res文件夹下而非res/value下)
  其中:

这里有两个参数:
enterAnim:进入的动画
exitAnim:退出的动画
注意:
1、必须在 StartActivity() 或 finish() 之后立即调用。
2、而且在 2.1 以上版本有效
3、手机设置-显示-动画,要开启状态

1
2
3
4
5
6
7
8
  接下来,就是滑动,先试一下手势。利用GestureDetector对该view的gesture进行监听,监听到了touch动作就将该动作传给GestureListener(类中自写),后者再判定起始点与结束点的X轴方向差即可判定是否算是右划手势,通过。  
  此处应该注意,反向的anim不仅仅是将数值反向,会出现屏幕异常飞动(即不正确跳转)的现象。
&#8195;&#8195;原因在于```<translate android:fromXDelta="0%p " android:toXDelta="100%p"android:duration="1000" />```这一语句中,百分号前面的数字是根据主屏幕的左侧作为标准,即0%来书写的。而from和to则是当前屏幕左侧的原位置。(即,滑动过去终究还是要按照那个绝对数值滑动回来滴)
&#8195;&#8195;【注:此处滑动回来,出没有问题但是从左侧进入的activity并未能正确显示动画。】
### 目标四:将数据改写成可修改的天数
&#8195;&#8195;一上来本来信心满满做的简洁而美观大方,结果被as的可视化xml预览给弄得不行。。并且十个班次的增删改怎么实现还没想好,暂时把其他的先做了出来,然后准备整理下后台数据,对接上。
![](/images/190828-第三版奇丑的信息更改页面.jpg)
&#8195;&#8195;一切成功对接,list使用很方便,将周几和预设班次都放进去了,使用date和number两个Picker实现了数据选择,保存数据顺利。但是在重新加载页面的时候,onCreate(null)调用就崩溃, ***这个问题没有解决*** 。

tvShowDialog = (TextView) findViewById(R.id.tvShowDialog);
tvShowDialog.setText(DateUtils.year+”-“+(1+DateUtils.month)+”-“+DateUtils.day);
tvShowDialog.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DatePickerDialog.OnDateSetListener listener=new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker arg0, int year, int month, int day) {
DateUtils.year=year;
DateUtils.month=month;
DateUtils.day=day;
tvShowDialog.setText(year+”-“+(1+month)+”-“+day); //将选择的日期显示到TextView中,因为之前获取month直接使用,所以不需要+1,这个地方需要显示,所以+1
}
};
DatePickerDialog dialog=new DatePickerDialog(settingsActivity.this,0,listener,DateUtils.year,DateUtils.month,DateUtils.day);//后边三个参数为显示dialog时默认的日期,月份从0开始,0-11对应1-12个月
dialog.show();
}
});//这个dialog内置picker我喜欢

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
&#8195;&#8195;现在需要的是将数据储存,下次打开时无需重新设置。拟使用SharedPreference或者onSaveInstanceState。  
&#8195;&#8195;今日个人也没有模拟器连接AS,也没有Log查看进程运行状况跟踪,查bug太慢。决定明天先弄下这两个,然后补一下android的四大元素,再继续完成其他目标和debug吧!
&#8195;&#8195;(还有3天时间,不知道能否顺利完工呢。。鹏哥帮我下数据集去了,完工了之后继续捣鼓我的六分类吧~)

19.8.30
&#8195;&#8195;Numberpicker由于没有现成的dialog可用,于是重新调整在了页面上,并且在设置时由于将实例化的findById放到了最下面,导致一直在报空指针的问题,多亏了有logcat才能看出来。。
&#8195;&#8195;主activity刷新的事儿,onCreate()函数确实无法传入null进行重刷新页面,我将onCreate()中定义保留,将setXXXX()放到了onResume()中,按照逻辑可以顺利实现更新。现在陷入new Date()与标杆NYR无法计算天数的bug,休息下弄掉这个就可以实现整体的刷新啦!
&#8195;&#8195;上面无法计算的原因是空指针报错,即我仅仅声明却没有实例化,导致计算天数函数传入的为空指针。
&#8195;&#8195;剩余部分未能够顺利完成,最后两天极为疯狂,黑白颠倒。不过所剩不多,开学周弄掉!


19.10.4
&#8195;&#8195;目前出现问题:APK包可在模拟器正常运行,放到荣耀V9真机上可以安装但启动时黑屏。已知android版本、分辨率、SDK版本全部相符。
&#8195;&#8195;上网寻求帮助,发现解决方案“依次选择工具栏上的:Build->Build APK”(原先选择的是这一条下面的Generate Signed APK),并且由于未签名导致的签名不一致问题,需要删除原版本。
&#8195;&#8195;新问题:anim补间动画完全未显示,仅仅显示页面的跳转。上网搜线索显示由于配置文件设置默认关闭(但我还是没有找到在哪里……)
### 目标五:使用viewgroup重写/再写这两个半页面
&#8195;&#8195;没有重写,直接使用了参考书籍《Android手机应用开发简明教程》中的ViewPager多页视图控件,搞定了多标签页的使用。

代码段已整合。。没法展示啦~
`
实现效果
  整体较为简洁流畅,不再尝试重写,接下来先完成可视化日历,再美化下settings界面内,就可以把上面所有界面和功能移植过来,去除多activity之间的Intent和跳转触发器,完善Toast提示,顺利完工啦!!!
  对于界面布局难看的问题,尝试使用了Reletive Layout与横竖网格等布局交叠使用,顺利完成。

目标六:添加可视化日历部分放在右边

  想要添加可视化日历,将班次一一插入日期底下,需要自定义GridLayout,较为繁琐。于是先添加了一个CalendarView和随焦点变化的提示,供查询指定日期的班次。

  目前就差所有界面功能移植一项未完成,有点想去练琴了…先溜~
19.10.5
  半个下午的时间,将软件的跳转和手势去除,顺利放入新的ViewPager内运行。
  唯一遇到的一个障碍,是“xxx=(TYPE)findById(R.id.xxx)”这样的语句,由于一个activity内放了多个xml文件(多个view),所以不再是单一view,编译器无法确认。
  解决方案很简单,由于原先其实是this.findById(),现如今只需要将省略的this.加上,变为xxx.findById()即可。

  整体终于完成了…不过这个Viewpager貌似导致了界面排版的不审美观。但是整体功能和运行都OK,暂时达到目的。笔者准备在母亲生日前后询问手机分辨率,之后略加调整,即可发送。
  (呼..长出一口气..不过话说,老妈应该不会看到这里吧。。应该还能惊喜吧(笑))

-------------本文结束感谢您的阅读-------------
想看点儿什么?客官请说~