level 1
android 通过 ImageAdapter
public class ImageAdapter implements IWXImgLoaderAdapter {
/***
*参数介绍 url 就是我们上面 image 传过来的src ImageView就是我们图片显示的控件,这个是weex做的事情,我们就暂时只要知道是这么回事就好了,WXImageQuality是显示图片的质量,是否需要压缩。 WXImageStrategy是我们加载图片的一系列动作过程
*/
@Override
public void setImage(final String url, final ImageView view, WXImageQuality quality, final WXImageStrategy strategy) {
Log.e("TAG111111",url+" "+view+" "+quality+" "+strategy);
//android 除去少数个把控件 修改UI一定要在UI线程,否则会出现异常
WXSDKManager.getInstance().postOnUiThread(new Runnable() {
@Override
public void run() {
if(view==null||view.getLayoutParams()==null){
return;
}
if (TextUtils.isEmpty(url)) {
view.setImageBitmap(null);
return;
}
//上面这两个异常判断就略过了,简单来说就是你定义了image却没有给宽高,或者没有给src,那么我们就直接return了
String temp = url;
Log.e("setimage", "temp = " + temp);
//如果我的本地图片是 src="../../assets/account.png" 这个形式的,所以url只要是 /../../assets 这样打头的说明是去读取本地文件的
if (url.startsWith("file://assets/")) {
//我们把路径替换为我们android项目中的assets文件路径,android访问assets里面的文件只需要 直接WXEnvironment.getApplication().getAssets().open("文件名");就可以了
temp = temp.replace("file://assets/../../","");
Log.e("setimage1", "temp = " + temp);
try {
InputStream is = WXEnvironment.getApplication().getAssets().open(temp);
view.setImageBitmap(BitmapFactory.decodeStream(is));
}catch (Exception e){
e.printStackTrace();
}
}else{
//如果不是以上面格式访问的图片,我们就认为是网络图片了,那下面是我们依赖Picasso 简单实现了网络图片加载,这样写会很灵活,譬如我们通常需要下载中显示一个图片,图片下载失败了显示一个err图片等等
if (view.getLayoutParams().width <= 0 || view.getLayoutParams().height <= 0) {
return;
}
Picasso.with(WXEnvironment.getApplication()).load(url)
// .placeholder(R.mipmap.icon_stub)//这里是放一个下载中的图片
// .error(R.mipmap.em_empty_photo)//这里放一个下载失败的图片
.into(view);
}
}
},0);
}
}
weex image src="../../progress.png" 然后将这个图片放到androidstudio assets目录下
2020年07月20日 07点07分
3