博客中知识点梳理
发布日期:2021-06-30 11:22:33
浏览次数:2
分类:技术文章
本文共 2493 字,大约阅读时间需要 8 分钟。
1
代码如下: imageView.startAnimation(welcomeAnimation); 查看API可知: 所有的View的子类都有方法startAnimation()方法2
代码如下: public File[] getFiles(File folder, final String keyword){ //1 得到目录和满足条件的文件 File[] filterFiles = folder.listFiles(new FileFilter() { @Override public boolean accept(File file) { if (file.isFile()) { filesCount++; } if (file.isDirectory()) { foldersCount++; } if (file.isDirectory()|| (file.isFile() && file.getName().contains(keyword))) { return true; } else { return false; }}
});
//2 将1结果中的文件直接添加到集合且用目录进行迭代 for (int i = 0; i < filterFiles.length; i++) { if (filterFiles[i].isFile()) { filesArrayList.add(filterFiles[i]); } if (filterFiles[i].isDirectory()) { getFiles(filterFiles[i],keyword); } } //3 返回结果 File finalFiles[] = new File[filesArrayList.size()]; filesArrayList.toArray(finalFiles); return finalFiles; } 此处主要是递归的调用. 注意: (1)方法getFiles(File folder, final String keyword)的第一参数是File类型的 (2)但是在递归调用时却调用了:if(filterFiles[i].isDirectory()) {getFiles(filterFiles[i],keyword);} 疑问:getFiles()方法第一个参数是File类型,但是该处filterFiles[i].isDirectory()是一个Directory. 这样不是参数类型不一致么:要求的是File但是传过去的是Directory??? 解答:还是没有理解到File这个类.理解:Java中操作硬盘上一个东西常常是将该东西封装成了一个File. 即不论该东西是单个的(比如一个test.txt)还是一个文件夹我们都是将它封装成了一个File对象.即平常 写的File file=new File(path);所以该file对象,可以是File(对应方法file.isFile())也可以是Directory (对应方法file.isDirectory()).注意file对象只能是其中的一种.3
代码中是给ImageView一个动画,即imageView.startAnimation(animation); 但是要是把ImageView换成一个Button也是可以的. 查看API可知: 所有的View的子类都有方法startAnimation()方法 即动画是作用在一个View上的.而不是作用于View中的内容(比如ImageView中的图片). 这点需要注意理解!4
代码如下: compressAndSaveBitmapToSDCard()方法,即第159行 rawBitmap.compress(Bitmap.CompressFormat.JPEG, quality, fileOutputStream); 注意:只有当压缩为JPEG的时候quality参数才起到作用,若是PNG格式则设置无效. 因为JPEG就是所谓的"有损的"编码解码器,即意味着压缩时会丢弃数据. 顺便总结一下: (1)改变位图的宽高 matrix.postScale(heightScale, widthScale); Bitmap newBitmap = Bitmap.createBitmap(rawBitmap, 0, 0, rawWidth,rawWidth, matrix, true); (2)改变位图的内存大小 rawBitmap.compress(Bitmap.CompressFormat.JPEG, quality, fileOutputStream);5
第70,71行代码,即: handler.postDelayed(updateRunnable, 1000); handler.sendEmptyMessage(CANCEL_RUNNABLE); 可以改进: 不用sendEmptyMessage()然后在handleMessage()中来removeCallbacks(updateRunnable); 这是种多此一举的操作 可以如下: handler.postDelayed(updateRunnable, 1000); handler.removeCallbacks(updateRunnable); 这样handler就不会执行updateRunnable6 Android图形绘制基础
小结: 自定义View的实现可以继承自View也可以继承自SurfaceView 区别: 继承自View的话,需要绘制的图形直接在onDraw()中写就是了. 继承自SurfaceView的要实现SurfaceHolder.Callback接口. 并且在该接口的surfaceCreated()方法中手动调用onDraw().
备注:
整理范围为:2012年11月19日-----2013年1月15日的博客
转载地址:https://it9527.blog.csdn.net/article/details/8509524 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
感谢大佬
[***.8.128.20]2024年04月18日 18时07分47秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Dockerfile构建编译MYSQL-5.6、MYSQL-5.7镜像
2019-04-30
Docker Compose容器编排工具
2019-04-30
docker的资源控制(CPU、内存、IO)
2019-04-30
Docker Consul 工具(理论+实操)
2019-04-30
Docker容器通信安全----TLS加密通讯
2019-04-30
Docker-------私有仓库 Harbor 的搭建
2019-04-30
搭建KVM虚拟化平台(实战+理论)
2019-04-30
OpenStack入门及原理基础理论知识点
2019-04-30
openstack的keystone认证服务
2019-04-30
OpenStack架构搭建实战(命令可复制)
2019-04-30
openstack的glance镜像服务
2019-04-30
Linux网络知识---网络配置
2019-04-30
openstack的Nova计算服务
2019-04-30
Linux的常用基础命令
2019-04-30
Linux操作系统的引导过程和排除启动故障
2019-04-30
自动化运维必备——ansible中playbook的编写
2019-04-30
自动化运维必备!ansible的安装及常用模块详解
2019-04-30
Error!启动elasticsearch报错
2019-04-30
CentOS7安装freeSwith1.6
2019-04-30