发表于: 2018-11-01 23:12:44

0 652


一、今天完成的事情

    用户发布信息用到的知识之前的任务基本都涉及到了,比如从从相册选取照片、拍照、压缩图片等等,为了提高代码的复用性,就把一些小功能写成了工具类,所以自然就涉及到了自定义接口。

比如压缩工具类

    还是用的Luban这个开源库,工具类里定义了一个接口LubanListener,里面有两个方法onSuccess(String newPath)和onFailed(),如果压缩成功,就首先接口的地方会调用onSuccess(String newPath),并且会得到图片压缩后的路径。

public class ImageCompress {


   private static LubanListener lubanListener;
   public void setLubanListener (LubanListener lubanListener) {
       ImageCompress.lubanListener = lubanListener;
   }

......

   /**
    * Luban压缩
    * path是要压缩的文件路径
    * 默认输出路径:/storage/emulated/0/Android/data/包名/cache/luban_disk_cache/保存文件的时间戳.**
    */
   public static void compressWithLuban(String path) {
       Luban.with(getContext())
              .load(path)
              .ignoreBy(0)
              .setCompressListener(new OnCompressListener() {
                   @Override
                   public void onStart() {
                       Log.d("Luban", "onStart: 开始压缩");
                   }

                   @Override
                   public void onSuccess(File file) {
                       Log.d("Luban", "onSuccess: 压缩成功");
                       String newPath = file.getAbsolutePath();
                       lubanListener.onSuccess(newPath);
                   }
                   @Override
                   public void onError(Throwable e) {
                        Log.d("Luban", "onError: 压缩失败");
                   }
              }).launch();

     }


......


    //接口     

    public interface LubanListener {

         void onSuccess(String newPath);
         void onFailed();
   }

}

在Activity中使用该工具类

ImageCompress imageCompress = new ImageCompress();

ImageCompress.compressWithLuban(path);
imageCompress.setLubanListener(new ImageCompress.LubanListener() {
   @Override
   public void onSuccess(String newPath) {
       ImageViewUtil.displayImage(headCIV, newPath);
       headPath = newPath;
   }

   @Override
   public void onFailed() {

   }
});

     将图片压缩后再加载到ImageView中,这是非常普遍的使用场景,有了工具类以后就不需要每次都重复写压缩代码,减少了很多工作量。另外这里的

ImageViewUtil也是一个工具类,disPlayImage()是其中的一个静态方法,其作用是将通过图片路径将图片显示到ImageView中,不需要返回数据,所以将他写成了静态方法,使用也很简单,直接用类名调用即可。

public class ImageViewUtil {
  private static final String TAG = "ImageViewUtil";

   /**
    * 再ImageView中显示图片
    ** @param imageView
    * @param imagePath
    */
   public static void displayImage(ImageView imageView, String imagePath) {
       if (imagePath != null) {
          Bitmap bitmap = BitmapFactory.decodeFile(imagePath);
          imageView.setImageBitmap(bitmap);
       } else {
          ......
       }

}

......


ImageView中的图片宽度适应屏幕,保持宽高比时,上下会留有空白,这里面涉及到两个属性scaleType

adjustViewBounds。

scaleType属性:

android:scaleType="matrix"

不改变原图的大小,从ImageView的左上角开始绘制原图,原图超过ImageView的部分作裁剪处理。
android:scaleType="center"

按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示
android:scaleType="centerCrop"

按比例扩大图片的size居中显示,使得图片长(宽)等于或大于View的长(宽)
android:scaleType="centerInside"

将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长/宽等于或小于View的长/宽
android:scaleType="fitCenter"

把图片按比例扩大/缩小到View的宽度,居中显示
android:scaleType="fitStart", android:scaleType="fitEnd"

在图片缩放效果上与FIT_CENTER一样,只是显示的位置不同,FIT_START是置于顶部,FIT_CENTER居中,

FIT_END置于底部。

android:scaleType="fitXY"

不按比例缩放图片,目标是把图片塞满整个View。


adjustViewBounds属性

true/false    是否保持原图宽高比        


二、明天计划的事情

      完成雇主发布

    

三、遇到的问题


四、收获

    整理了几个工具类,虽然都很简单,但总归省了不少事,慢慢来吧。




返回列表 返回列表
评论

    分享到