【教程】如何在电脑端(Win10)播放杜比视界(转载) 作者: Chuwen 时间: 2020-11-02 分类: Windows 评论 转自:https://tieba.baidu.com/p/6673493559 方法:理论上非HDR显示器也可颜色正确的播放,当然显示器支持HDR效果会更好,但必须是windows 10的操作系统,在链接附件中有个DolbyVision+HDR.AppxBundle的文件,解压后右键用应用安装器打开,然后打开win10应用商店查找更新更新即可。然后用电影和电视应用打开杜比视界的视频(附件中有一小片段视频)即可发现颜色正确播放。 附件:https://nowtime.lanzous.com/iBvHVhyvehi
(Android 笔记) Java 输出一页日历(以周一为一周的开始) 以及实现思路概况 作者: Chuwen 时间: 2020-11-01 分类: Android 评论 # 实现思路概述 > 由于我学 `Java` 是**半路出家,所以一些东西讲的并不标准**,请见谅,很愿意接受大家的批评建议 1. 用一个集合(`List`) 储存本页日历的日期信息(年、月、日、是否为本月<用以着色>) 2. 实例化日历类 `Calendar` ``` Calendar calendar = Calendar.getInstance(); ``` 3. 设置要显示哪年哪月的日历信息 ``` calendar.set(Calendar.YEAR, 2020);//设置哪年 calendar.set(Calendar.MONTH, 11);//设置哪个月 ``` 4. 将日历信息设置为本月1号 ``` calendar.set(Calendar.DAY_OF_MONTH, 1);//将日期推到本月1号 ``` 5. 获取本月1号是星期几,**由于我们需要设置从 周一 为一周的开始**,所以就有以下代码 > 如果是星期一,变量 `currentDayOfWeek` 应该输出 1; > ... > 如果是星期日,变量 `currentDayOfWeek` 应该输出 7. ``` int currentDayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); currentDayOfWeek = currentDayOfWeek == 1 ? 7 : currentDayOfWeek - 1;//获取当前星期几(星期一就是1 ... 星期天是 7) ``` 6. 按照习惯,除了显示本月日历,一般还会显示上个月或下个月来填充 **剩余的格子**,所以我们在绘制前,将日期再往前推(减去) **当前星期几+1 的天数** > ![按照习惯,除了显示本月日历,一般还会显示上个月或下个月来填充 **剩余的格子**,所以我们在绘制前,将日期再往前推(减去) 当前星期几+1 的天数][1] ``` calendar.add(Calendar.DATE, -currentDayOfWeek + 1);//将日期倒退 当前星期几+1 的天数 ``` 7. 然后 **for 循环**,基础的日历格子有 **35** 个 ``` for (int i = 0; i < 35; i++) { Log.i("日期", calendar.get(Calendar.YEAR)+"年" +calendar.get(Calendar.MONTH) + 1+"月"+calendar.get(Calendar.DAY_OF_MONTH)+"日"; calendar.add(Calendar.DATE, +1);//日期+1 获取明天的 } ``` 8. **但是有特殊情况**,当该月1号是 **星期日**,那么我们还应该再增加 `7个格子`,不然日历显示不完整。所以我们需要额外判断下 ``` //绘制的格子数,如果恰好本月1号是星期天,那么就还要再加7个格子以显示完整日历 int gridNum = (currentDayOfWeek < 7) ? 35 : 42; for (int i = 0; i < gridNum; i++) { Log.i("日期", calendar.get(Calendar.YEAR)+"年" +calendar.get(Calendar.MONTH) + 1+"月"+calendar.get(Calendar.DAY_OF_MONTH)+"日"; calendar.add(Calendar.DATE, +1);//日期+1 获取明天的 } ``` 9. 大概日历的思路就是这样,要用其它语言实现也并不难 # `CalendarBean.java` ```java public class CalendarBean { private int year; private int month; private int day; private boolean currentMonth; private boolean isChecked = false; public CalendarBean() { } public CalendarBean(int year, int month, int day, boolean currentMonth) { this.year = year; this.month = month; this.day = day; this.currentMonth = currentMonth; } public int getYear() { return year; } public void setYear(int year) { this.year = year; } public int getMonth() { return month; } public void setMonth(int month) { this.month = month; } public int getDay() { return day; } public void setDay(int day) { this.day = day; } public boolean isCurrentMonth() { return currentMonth; } public void setCurrentMonth(boolean currentMonth) { this.currentMonth = currentMonth; } @NonNull @Override public String toString() { return getYear() + "年" + getMonth() + "月" + getDay() + "日"; } public boolean isChecked() { return isChecked; } public void setChecked(boolean checked) { isChecked = checked; } } ``` # CalendarCreate.java ```java public class CalendarCreate{ private Calendar calendar; private List calendarBeanList = new ArrayList<>(); public static void main(String[] args){ printCalendar(2020, 11);//输出2020年11月日历 } public void printCalendar(int year, int month) { month -= 1;//减去1,因为 java 日历,月份从 0 开始 int currentDayOfWeek; calendarBeanList.clear(); calendar.set(Calendar.YEAR, year);//设置哪年 calendar.set(Calendar.MONTH, month);//设置哪个月 calendar.set(Calendar.DAY_OF_MONTH, 1);//将日期推到本月1号 currentDayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); currentDayOfWeek = currentDayOfWeek == 1 ? 7 : currentDayOfWeek - 1;//获取当前星期几(星期一就是1 ... 星期天是 7) calendar.add(Calendar.DATE, -currentDayOfWeek + 1);//将日期倒退 当前星期几+1 的天数 int gridNum = (currentDayOfWeek < 7) ? 35 : 42;//绘制的格子数,如果恰好本月1号是星期天,那么就还要再加57个格子以显示完整日历 for (int i = 0; i < gridNum; i++) { calendarBeanList.add(i, new CalendarBean( calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH) + 1,//一年中的哪个月。月份 calendar.get(Calendar.DAY_OF_MONTH),//一个月中的第几天。几号 calendar.get(Calendar.MONTH) == month//判断是否为本月 )); calendar.add(Calendar.DATE, +1);//日期+1 获取明天的 } Log.i("打印日历数组", calendarBeanList.toString()); } } ``` # 运行结果 ``` I/打印日历数组: [2020年10月26日, 2020年10月27日, 2020年10月28日, 2020年10月29日, 2020年10月30日, 2020年10月31日, 2020年11月1日, 2020年11月2日, 2020年11月3日, 2020年11月4日, 2020年11月5日, 2020年11月6日, 2020年11月7日, 2020年11月8日, 2020年11月9日, 2020年11月10日, 2020年11月11日, 2020年11月12日, 2020年11月13日, 2020年11月14日, 2020年11月15日, 2020年11月16日, 2020年11月17日, 2020年11月18日, 2020年11月19日, 2020年11月20日, 2020年11月21日, 2020年11月22日, 2020年11月23日, 2020年11月24日, 2020年11月25日, 2020年11月26日, 2020年11月27日, 2020年11月28日, 2020年11月29日, 2020年11月30日, 2020年12月1日, 2020年12月2日, 2020年12月3日, 2020年12月4日, 2020年12月5日, 2020年12月6日] ``` # 实际应用效果 > 橘黄色方框是实际应用效果 > 如果想要看完整的项目代码,可以查看 **糖疯子** 的代码 https://www.jianshu.com/p/4ae8f56f3bcb ![1604206482003.png][2] [1]: https://cdn.nowtime.cc/2020/11/01/2694057533.jpg [2]: https://cdn.nowtime.cc/2020/11/01/2390028636.png
MPAndroidChart 设置图标两边间距(偏移量)防止文字过长遮挡住 作者: Chuwen 时间: 2020-10-30 分类: Android 1 条评论 # 代码 ``` LineChart linechart2=(LineChart)findViewById(R.id.linechart2); linechart2.setExtraLeftOffset(100f);//左间距 linechart2.setExtraRightOffset(80f);//右间距 ``` ![未命名图片.png][1] [1]: https://cdn.nowtime.cc/2020/10/30/2262053361.png
Linux 相关练习题 作者: Chuwen 时间: 2020-10-30 分类: Linux 评论 # 以#开头的那一行是注释,不需要运行 # 以#开头的那一行是注释,不需要运行 # 以#开头的那一行是注释,不需要运行 1. ## 创建云服务器,提供能够进行有效连接的公网IP。 --5分 (如果未建立则考试没有成绩) 2. ## 创建 `jjcpxp` 用户,并设置密码为 `12345678` --5分 (如果未建立则考试不能及格) ```bash # 指定 -M 参数时不在 /home 下创建目录 useradd jjcpxp -p 12345678 #小扩展,删除用户可以使用 userdel -r 用户名 ``` 3. ## 创建 `test` 用户,并将用户目录设置为 `/home/jjcpxp` 设置密码为 `123456`. --5分 ```bash # -d /home/jjcpxp # -m useradd test -p 123456 # 修改目录 chown -R test.test /home/jjcpxp ``` 4. ## 用 `test` 用户在 `/home/jjcpxp` 目录下建立 `TXT.sh` 文件,文件内容为批处理建立 `TXT1.txt`、`TXT2.txt`、`TXT3.txt` 文件。 再建立 `del_TXT.sh` 文件文件内容为删除以上建立的3个txt文件,`jjcpxp` 用户可以操作执行。 --10分 ```bash # 登录 test 账户 su - test # 进入 /home/jjcpxp 目录 cd /home/jjcpxp # 创建 TXT.sh 文件 touch TXT.sh # 设置 TXT.sh 文件内容:创建 TXT1.txt、TXT2.txt、TXT3.txt 文件 echo touch TXT1.txt >> TXT.sh echo touch TXT2.txt >> TXT.sh echo touch TXT3.txt >> TXT.sh #################################################### # 再建立 del_TXT.sh 文件 touch del_TXT.sh # 文件内容为删除以上建立3个txt文件 echo rm -rf TXT1.txt >> del_TXT.sh echo rm -rf TXT2.txt >> del_TXT.sh echo rm -rf TXT3.txt >> del_TXT.sh # 设置执行权限 ## 首先切换成 root 用户 su - root cd /home/jjcpxp # 然后再设置文件权限 (jjcpxp 用户可以操作执行) chown jjcpxp del_TXT.sh ``` 5. ## 用 `jjcpxp` 用户在 `/home/jjcpxp` 目录下建立 `Dir.sh` 文件 ,文件内容为建立 `dir1`、`dir2`,`dir3` 的3个文件夹,同时建立 `del_Dir.sh` 文件,文件内容为同时删除上述建立的文件目录。 --10分 ```bash su - jjcpxp touch Dir.sh echo mkdir dir1 >> Dir.sh echo mkdir dir2 >> Dir.sh echo mkdir dir3 >> Dir.sh touch del_Dir.sh echo rm -rf dir1 >> del_Dir.sh echo rm -rf dir2 >> del_Dir.sh echo rm -rf dir3 >> del_Dir.sh ``` 6. ## 建立内容为“!!!欢迎来到[自己姓名]CentOS服务器!!!”登录显示。--5分 ```bash su - root vi /etc/motd # 按键盘上 i 键进入编辑 # 然后删除文 # 然后按 Esc 键,输入 :wq # 然后按回车保存并关闭文件 ``` 7. ## 在 `/home/jjcpxp` 建立一个属主为 `root` 的 `xuehao` 文件,文件内容为`自己的姓名 /学号`:同时在 `/tmp` 目录下建立相同 的文件 且 `jjcpxp` 用户可读 --8分 ```bash su - root touch /home/jjcpxp/xuehao echo 陈文洲/10086 > /home/jjcpxp/xuehao cp /home/jjcpxp/xuehao /tmp # 参考 https://blog.51cto.com/qingmiao/2069603 setfacl -m u:jjcpxp:r /tmp/xuehao ``` 8. ## 统计 `/tmp/linux_test.txt` 文件的前10行文件内容并把内容结果输出到 `/home/jjcpxp` 目录下的 `grep` 文件中 --8分 ```bash touch /tmp/linux_test.txt # 按键盘上 i 键进入编辑 # 自己在里面写15行内容 # 然后按 Esc 键,输入 :wq # 然后按回车保存并关闭文件 vi /tmp/linux_test.txt head -10 /tmp/linux_test.txt > /home/jjcpxp/grep ``` 9. ## 统计云服务器在正在运行的 `.service` 服务结果并将结果输出到 `/home/jjcpxp` 目录下 `service` 文件中 --8分 ```bash ps auxw > /home/jjcpxp/service ``` 10. ## 将 `/etc/sysconfig/` 目录下的树结构结果输出到 `/home/jjcpxp` 目录下的 `tree` 文件中去 -8分 ```bash # 安装 tree 命令 yum install -y tree tree /etc/sysconfig/ > /home/jjcpxp/tree ``` 11. ## 统计 `/etc/sysconfig/network-scripts/ifcfg-eth0` 的文件文件行数并输出到 `/home/jjcpxp/` 目前的 `wc` 中。 再将上述文件的内容输出到 `ifcfg-eth0` 文件中 --8分 ```bash wc -l /etc/sysconfig/network-scripts/ifcfg-eth0 > /home/jjcpxp/wc cat /home/jjcpxp/wc > /home/jjcpxp/ifcfg-eth0 ``` 12. ## 将关机命令、重启命令的3种形式 写入到 `/home/jjcpxp` 目录中的 `shut` 文件中 --5分 ```bash # 关机命令 echo shutdown -h now >> /home/jjcpxp/shut # ## 重启命令 echo shutdown -r now >> /home/jjcpxp/shut ``` 13. ## 测试 www.163.com 网站的联通性并测试10个IMCP包将结果输出到 `/home/jjcpxp` 目录中的 `ping`文件中 --10分 ```bash # -c 参数,指定次数 # > /home/jjcpxp/ping 将结果重定向至 /home/jjcpxp/ping 并覆盖写入文件 ping -c 10 www.163.com > /home/jjcpxp/ping ``` 14. ## 将 `/home/jjcpxp` 目录中的所有文件拷贝到 `/tmp` 目录中 `test` 目录下,所有文件设为 `test` **只读** 属性 --10分 ```bash mkdir /tmp/test cp /home/jjcpxp/* /tmp/test setfacl -m u:jjcpxp:r /tmp/test/* ```
MPAndrodChart 绘制分组柱状图实例 作者: Chuwen 时间: 2020-10-29 分类: Android 评论 # MPAndrodChart 绘制分组柱状图实例 自己摸索了许久写出来的,只给出死方法例子,有些地方有注释,不懂得话可以评论区留言 # 布局文件 ``` ``` # Java 代码 > 我直接分享方法了 > 你可以直接在 `XXXXXActivity` 的 `onCreate()` 方法调用本方法即可 ``` //我直接分享方法了 //你直接再 Activity 的 onCreate() 方法调用本方法即可 private void drawBarChart() { //这个不必多解释吧 BarChart barChart = findViewById(R.id.barchart1); barChart.getLegend().setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); barChart.getLegend().setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); final Description description = new Description(); description.setPosition(200, 60); description.setText("道路拥堵状况");//设置简介 description.setTextSize(10f); barChart.setDescription(description); List barEntryList = new ArrayList<>(); barEntryList.add(new BarEntry(1, 4)); barEntryList.add(new BarEntry(2, 5)); barEntryList.add(new BarEntry(3, 4)); barEntryList.add(new BarEntry(4, 3)); barEntryList.add(new BarEntry(5, 2)); barEntryList.add(new BarEntry(6, 1)); barEntryList.add(new BarEntry(7, 3)); List barEntryList2 = new ArrayList<>(); barEntryList2.add(new BarEntry(1, 5)); barEntryList2.add(new BarEntry(2, 4)); barEntryList2.add(new BarEntry(3, 3)); barEntryList2.add(new BarEntry(4, 2)); barEntryList2.add(new BarEntry(5, 1)); barEntryList2.add(new BarEntry(6, 2)); barEntryList2.add(new BarEntry(7, 3)); List barEntryList3 = new ArrayList<>(); barEntryList3.add(new BarEntry(1, 4)); barEntryList3.add(new BarEntry(2, 2)); barEntryList3.add(new BarEntry(3, 3)); barEntryList3.add(new BarEntry(4, 2)); barEntryList3.add(new BarEntry(5, 4)); barEntryList3.add(new BarEntry(6, 1)); barEntryList3.add(new BarEntry(7, 1)); List barEntryList4 = new ArrayList<>(); barEntryList4.add(new BarEntry(1, 2)); barEntryList4.add(new BarEntry(2, 1)); barEntryList4.add(new BarEntry(3, 5)); barEntryList4.add(new BarEntry(4, 2)); barEntryList4.add(new BarEntry(5, 3)); barEntryList4.add(new BarEntry(6, 4)); barEntryList4.add(new BarEntry(7, 4)); List barEntryList5 = new ArrayList<>(); barEntryList5.add(new BarEntry(1, 1)); barEntryList5.add(new BarEntry(2, 2)); barEntryList5.add(new BarEntry(3, 2)); barEntryList5.add(new BarEntry(4, 3)); barEntryList5.add(new BarEntry(5, 5)); barEntryList5.add(new BarEntry(6, 4)); barEntryList5.add(new BarEntry(7, 3)); List barEntryList6 = new ArrayList<>(); barEntryList6.add(new BarEntry(1, 2)); barEntryList6.add(new BarEntry(2, 1)); barEntryList6.add(new BarEntry(3, 1)); barEntryList6.add(new BarEntry(4, 2)); barEntryList6.add(new BarEntry(5, 4)); barEntryList6.add(new BarEntry(6, 3)); barEntryList6.add(new BarEntry(7, 3)); List barEntryList7 = new ArrayList<>(); barEntryList7.add(new BarEntry(1, 4)); barEntryList7.add(new BarEntry(2, 1)); barEntryList7.add(new BarEntry(3, 2)); barEntryList7.add(new BarEntry(4, 2)); barEntryList7.add(new BarEntry(5, 3)); barEntryList7.add(new BarEntry(6, 2)); barEntryList7.add(new BarEntry(7, 1)); BarDataSet barDataSet = new BarDataSet(barEntryList, "学院路"); BarDataSet barDataSet2 = new BarDataSet(barEntryList2, "联想路"); BarDataSet barDataSet3 = new BarDataSet(barEntryList3, "医院路"); BarDataSet barDataSet4 = new BarDataSet(barEntryList4, "幸福路"); BarDataSet barDataSet5 = new BarDataSet(barEntryList5, "环城快速路"); BarDataSet barDataSet6 = new BarDataSet(barEntryList6, "环城高速"); BarDataSet barDataSet7 = new BarDataSet(barEntryList7, "停车场"); barDataSet.setColor(Color.parseColor("#bf382d")); barDataSet2.setColor(Color.parseColor("#2f4455")); barDataSet3.setColor(Color.parseColor("#60a0a7")); barDataSet4.setColor(Color.parseColor("#d48164")); barDataSet5.setColor(Color.parseColor("#91c6af")); barDataSet6.setColor(Color.parseColor("#769e83")); barDataSet7.setColor(Color.parseColor("#c98624")); BarData barData = new BarData(barDataSet, barDataSet2, barDataSet3, barDataSet4, barDataSet5, barDataSet6, barDataSet7); barData.setDrawValues(false); barChart.getXAxis().setValueFormatter(new IAxisValueFormatter() { @Override public String getFormattedValue(float value, AxisBase axis) { switch ((int) value) { case 0: return "周一"; case 10: return "周二"; case 20: return "周三"; case 30: return "周四"; case 40: return "周五"; case 50: return "周六"; case 60: default: return "周日"; } } }); barChart.getAxisLeft().setYOffset(25f);//这样会向下偏移 50% barChart.getAxisLeft().setAxisMinimum(0f); barChart.getAxisLeft().setAxisMaximum(5f); barChart.getAxisLeft().setLabelCount(6, true);//设置间距 barChart.getAxisLeft().setValueFormatter(new IAxisValueFormatter() { @Override public String getFormattedValue(float value, AxisBase axis) { switch ((int) value) { case 1: return "畅通"; case 2: return "缓行"; case 3: return "一般拥堵"; case 4: return "中度拥堵"; case 5: return "严重拥堵"; default: return ""; } } }); barChart.getAxisRight().setAxisMinimum(0f); barChart.getAxisRight().setAxisMaximum(5f); barChart.getAxisRight().setLabelCount(6, true);//设置间距 barChart.getXAxis().setTextSize(12f); barChart.getXAxis().setYOffset(-0); barChart.getXAxis().setAxisMinimum(1); barChart.getXAxis().setAxisMaximum(70); barChart.getXAxis().setPosition(XAxis.XAxisPosition.BOTTOM); barChart.getXAxis().setCenterAxisLabels(true); barChart.getXAxis().setDrawAxisLine(false);//横线 barChart.getXAxis().setDrawGridLines(false);//垂线 barChart.setData(barData);//先设置数据 float groupSpace = 2f;//0.3 * DaraSet float barSpace = 0.28f; //0.04 * DataSet //0.1 * DataSet //然后再设置分组柱状图 barChart.groupBars(.7f, groupSpace, barSpace); barChart.invalidate(); } ``` # 运行截图 ![Snipaste_2020-10-29_20-30-36.jpg][1] [1]: https://cdn.nowtime.cc/2020/10/29/1302616410.jpg