作者:欢乐的小码农 | 来源:互联网 | 2024-10-20 15:14
1http:blog.csdn.netlfdfhlarticledetails8220729代码如下:imageView.startAnimation(welcomeAnimation)
1 http://blog.csdn.net/lfdfhl/article/details/8220729
代码如下:
imageView.startAnimation(welcomeAnimation);
查看API可知:
所有的View的子类都有方法startAnimation()方法
2 http://blog.csdn.net/lfdfhl/article/details/8302457
代码如下:
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 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 http://blog.csdn.net/lfdfhl/article/details/8239595
代码中是给ImageView一个动画,即imageView.startAnimation(animation);
但是要是把ImageView换成一个Button也是可以的.
查看API可知:
所有的View的子类都有方法startAnimation()方法
即动画是作用在一个View上的.而不是作用于View中的内容(比如ImageView中的图片).
这点需要注意理解!
4 http://blog.csdn.net/lfdfhl/article/details/8248848
代码如下:
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 http://blog.csdn.net/lfdfhl/article/details/8255416
第70,71行代码,即:
handler.postDelayed(updateRunnable, 1000);
handler.sendEmptyMessage(CANCEL_RUNNABLE);
可以改进:
不用sendEmptyMessage()然后在handleMessage()中来removeCallbacks(updateRunnable);
这是种多此一举的操作
可以如下:
handler.postDelayed(updateRunnable, 1000);
handler.removeCallbacks(updateRunnable);
这样handler就不会执行updateRunnable
6 Android图形绘制基础
http://blog.csdn.net/lfdfhl/article/details/8440260
http://blog.csdn.net/lfdfhl/article/details/8440247
小结:
自定义View的实现可以继承自View也可以继承自SurfaceView
区别:
继承自View的话,需要绘制的图形直接在onDraw()中写就是了.
继承自SurfaceView的要实现SurfaceHolder.Callback接口.
并且在该接口的surfaceCreated()方法中手动调用onDraw().
备注:
整理范围为:2012年11月19日-----2013年1月15日的博客