发表于: 2018-11-01 23:12:44
0 847
一、今天完成的事情
用户发布信息用到的知识之前的任务基本都涉及到了,比如从从相册选取照片、拍照、压缩图片等等,为了提高代码的复用性,就把一些小功能写成了工具类,所以自然就涉及到了自定义接口。
比如压缩工具类
还是用的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 是否保持原图宽高比
二、明天计划的事情
完成雇主发布
三、遇到的问题
四、收获
整理了几个工具类,虽然都很简单,但总归省了不少事,慢慢来吧。
评论