在Day 14 服务端生成了缩略图,今天实现客户端显示缩略图,一个ListView,加上ImageView即可实现效果,当然啦页面依旧是很简陋,只是实现了功能,下面是核心代码,从服务器获取到照片列表后在分别将缩略图也从服务器请求下来,绑定到ImageView上。完整代码参考TaoAlbum,GitHub上的代码。
ServerAlbumListActivity.onSuccess
@Override
public void onSuccess(String service, ResultData ret) {
Log.i(TAG,"service="+service+".onSuccess");
if (ServiceHelper.PHOTO_LIST_KEY.equals(service)){
if (ret != null && ret.isSuccess()) {
if (ret.getData()!=null){
resList = ( List<ResourceDto>)ret.getData();
if (resList!=null && !resList.isEmpty()) {
list = new ArrayList();
for (final ResourceDto resDto : resList) {
if (resDto.getPreview()==null || "".equals(resDto.getPreview())){
continue;
}
// Get preview image
ServiceHelper.showPhoto(resDto.getFilePath()+"/"+resDto.getPreview(),new ServiceHelper.ServiceCallback(){
@Override
public void onSuccess(String service, ResultData ret) {
if (ServiceHelper.SHOW_PHOTO_KEY.equals(service) && ret!=null
&& ret.isSuccess() && ret.getData()!=null) {
Map<String, Object> map = new HashMap();
map.put("fileName",resDto.getFileName());
map.put("filePath",resDto.getFilePath());
Bitmap bitmap = (Bitmap)ret.getData();
map.put("imageView",bitmap );
list.add(map);
}
}
@Override
public void onFailure(String service, ResultData ret) {
}
});
}
if (list!=null && !list.isEmpty() ){
final SimpleAdapter adapter = new SimpleAdapter(this,list,R.layout.activity_album_ui_img_item,
new String[] { "imageView" },new int[] { R.id.album_ui_img_preview});
adapter.setViewBinder(new ViewBinder() {
public boolean setViewValue(View view, Object data,
String textRepresentation) {
if(view instanceof ImageView && data instanceof Bitmap){
ImageView iv = (ImageView) view;
Bitmap bm = (Bitmap) data;
iv.setImageBitmap(bm);
iv.setMaxWidth(bm.getWidth());
iv.setMaxHeight(bm.getHeight());
return true;
}else
return false;
}
});
context.runOnUiThread(new Runnable() {
@Override
public void run() {
photoListView.setAdapter(adapter);
}
});
}
}
}
}
}
}
截图
到这里,这个项目的基本功能也算是完整了,当然了要是想继续加功能还是可以加的,接下来要开始一个新的项目,也不完全算是新项目,就是给现在的照片服务器加一个新的客户端,我选择React来实现,现在WEB开发,前后端分离已经成为了主流趋势,而且它的优点也非常突出,比如前后端的开发和部署可以完全分离。