现在的位置: 首页 > 综合 > 正文

博客中知识点梳理

2013年08月31日 ⁄ 综合 ⁄ 共 2807字 ⁄ 字号 评论关闭

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 < 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 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日的博客

 

抱歉!评论已关闭.