Shell 中的一个坑(文件名带有空格时操作)

起因 今天本来想给 U 盘换歌,所以就直接把自己的网易云音乐下载的音乐拷进去,结果发现 U 盘的大小不够(最近比较穷,买不起3GB 以上的 U盘只能拿好多年前的3G U 盘先用着)。 差了400MB,想到车载电脑也放不了 flac 格式的音乐文件,所以就直接写脚本删除这些非 mp3 格式的歌曲文件。 初次尝试 于是按照之前的 allCode.sh 脚本,直接改了个 rmFileByExtension.sh 的脚本,其中,核心代码部分是这样的: function searchFiles() { echo “find all $filter files” if [[ x$filter == x ]]; then if [[ $sureRm == false ]]; then read -p “No extension, so dangerous, do you want go on? yes|no…

MBanner2 项目(二)—编写可测试的代码、实例展示

接上篇的项目基本设计,这次主要是来说具体的实现。 编写可测试的代码 不管在之前的 MBanner 1.0 分支的版本中,还是在借鉴的 QingtingBannerView 中,测试这个环节始终是遗漏的一点。毕竟都是程序员,很少会进行测试驱动开发。所以这次为了解决这个问题,我这边采用了 Junit 进行了部分的代码测试。也是一种测试驱动开发的尝试吧。 具体以具体的代码为例【MBannerLine.java】: 在 1.0 的版本中,MBannerLine 的绘制逻辑和视图的绘画是杂糅在一起的。 protected void onDraw(Canvas canvas) { if (mPosition == 0) { canvas.drawLine( (mPageSize – 3) * mPageWidth + mPageWidth * mPositionOffset, 0, (mPageSize – 2) * mPageWidth + mPageWidth * mPositionOffset, 0, mPaint); canvas.drawLine(0, 0, mPageWidth * mPositionOffset, 0, mPaint); }…

MBanner2 项目(一) — 基本设计

写这篇文章的一个出发点就是,对自己的 第一版本 非常的不满意,很多地方的解决思路不够优雅。换句话说就是基于 lib 的二次自定义非常麻烦。 所以才会开启 2.0 版本的开发(反正用的人也不会多,但是我比较喜欢抠细节)。 自定义程度不高主要体现在三方面: PagerViewAdapter 实现方式为 class,并不是接口,导致无法自定义 Adapter,从而绝了换 view 的路。 PageIndicator 实现方式单一,且无法改变。 代码的可测试性不强。(在安卓的组件中,这个问题还是挺棘手的) 总的来说,这只是个为了项目而催生的一个紧急替代品,并不能算得上是一个比较靠谱的开源库。所以 MBanner2 应运而生。 也算了了我一个心愿。 其实,这个空间也可以作为一个 ImageView 来使用。因为从逻辑和功能上说,这两个是非常相似的。所以这也是我安卓控件模块化的一个开始。 也参考了几个开源的高 star 项目,比如: saiwu-bigkoo/Android-ConvenientBanner JeasonWong/QingtingBannerView youth5201314/banner 收获的话,大概如下: 之前,我都是直接绑定第三方图片加载库来进行图片加载的,但是在阅读代码的时候,看到了 youth5201314 的一个巧妙的实现思路,即提供一个暴露给用户的 onImgLoadListener 接口,由用户来决定图片加载的逻辑。同时也可以提供一个默认的加载逻辑。 在 saiwu-bigkoo 的实现方式,则是通过 ImageHolder 的思路来实现,以我个人而言,更倾向于 youth5201314 的实现思路。 在样式自定义上,提供比较多样式的 youth5201314 的做法是提供茫茫多的 switch case 选项,这我觉得并不是一个很好的解决办法,只能说的上是一个临时解决方案。可扩展性并不高(因为总不可能在项目里,extends 它的类,然后在添 switch 吧)。 在 saiwu-bigkoo…

MBanner 介绍

最近做了一个安卓项目,因为有个部分是需要实现一个可以展示标题和图片的 AD Banner。所以就同性交友网上(github)上找了一些案例。 作为一个安卓初学者,所以一开始就选用了 star 最多的那个。效果也很好,但是对方提出了一个需求,就是希望在图片上显示标题。做一个类似的蜻蜓上面的 Banner 效果。所以,就搜索到了 QingTingBannerView 这个项目。 这个项目的 star 数非常高。所以一开始认为是挺靠谱的一个。但是使用中发现了如下几个问题。 在执行 BannerView.setEntities 的时候,他并不是直接的将数组替换,而仅仅是做一个 append 操作。也就是说,当刷新的时候,3个 Banner 会变成 6个 Banner,如果没有在外面做去重的话。 下部的 Title 和是在图片下方,会多占用20dp 左右的空间,在小屏手机上展示效果不佳。 对于业务来说,我们需要更多的可定制化。但是在这个设计中,PageAdapter 只有一个 class,而且是已经实现好的。所以不存在继承接口重新设计的可能性。 基于以上的几点。我们产生了自己开发 Banner 库的想法。 所以,基于上述项目,开发了 MBanner 类库。 主要的特性有: 支持图片的缩放。 添加 Banner 上长按响应事件。 可以通过一定的修改,变成图片阅览器。 添加自动滚动。 添加代码自定义图片背景色和进度条颜色 API。 使用 Glide 库作为图片加载,支持图片缓存。 添加默认加载动画,也可自定义动画。 具体的代码在:GITHUB-MBANNER 实机效果如下: 图片 Banner: 注意,上面是不添加点击放大功能的 banner,下面添加放大功能(不能触发点击和长按事件)。 图片浏览器:…