最近和几个同事想搞一个app项目,但是原生技术储备有限,在技术选择方面遇到一些困难,LZ以前有使用过cordova的经验,但是一直受制于它js展现能力和内存占用过大的弊端,想要尝试一些更新的技术,例如react-native,还有去年阿里开源的weex项目,这两种技术都是采用当前最流行的前端框架,封装了android和ios的原生能力,体验度和原生几乎无差异,在一番权衡之后,我们开启了填埋weex大坑的道路。
weex的安装和部署过程等有机会了再说,在开发的过程中遇到了一个加载本地图片的问题,现在就把解决方法贴出来,供大家参考。
首先加载本地图片需要一个第三方类库,在build.gradle加入如下配置
classpath 'com.vanniktech:gradle-android-junit-jacoco-plugin:0.5.0'
接下来是加载本地图片的工具类
package com.example.weex.letu; import android.widget.ImageView; import com.nostra13.universalimageloader.core.ImageLoader; /** * 异步加载本地图片工具类 * * @author songfeng * */ public class LoadLocalImageUtil { private LoadLocalImageUtil() { } private static LoadLocalImageUtil instance = null; public static synchronized LoadLocalImageUtil getInstance() { if (instance == null) { instance = new LoadLocalImageUtil(); } return instance; } /** * 从内存卡中异步加载本地图片 * * @param uri * @param imageView */ public void displayFromSDCard(String uri, ImageView imageView) { // String imageUri = "file:///mnt/sdcard/image.png"; // from SD card ImageLoader.getInstance().displayImage("file://" + uri, imageView); } /** * 从assets文件夹中异步加载图片 * * @param imageName * 图片名称,带后缀的,例如:1.png * @param imageView */ public void dispalyFromAssets(String imageName, ImageView imageView) { // String imageUri = "assets://image.png"; // from assets ImageLoader.getInstance().displayImage("assets://" + imageName, imageView); } /** * 从drawable中异步加载本地图片 * * @param imageId * @param imageView */ public void displayFromDrawable(int imageId, ImageView imageView) { // String imageUri = "drawable://" + R.drawable.image; // from drawables // (only images, non-9patch) ImageLoader.getInstance().displayImage("drawable://" + imageId, imageView); } /** * 从内容提提供者中抓取图片 */ public void displayFromContent(String uri, ImageView imageView) { // String imageUri = "content://media/external/audio/albumart/13"; // // from content provider ImageLoader.getInstance().displayImage("content://" + uri, imageView); } }
然后是要对ImageLoader进行注册,修改WXApplication
@Override public void onCreate() { super.onCreate(); InitConfig config=new InitConfig.Builder().setImgAdapter(new ImageAdapter()).build(); WXSDKEngine.initialize(this,config); initImageLoader(this.getApplicationContext()); } private void initImageLoader(Context context) { ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder( context).threadPriority(Thread.NORM_PRIORITY - 2) .denyCacheImageMultipleSizesInMemory() .tasksProcessingOrder(QueueProcessingType.LIFO) .writeDebugLogs() .build(); ImageLoader.getInstance().init(config); }
weex官方的demo里面已经集成了img标签的能力,但是只有网络请求图片的功能,现在我们把加载android本地图片的逻辑也加进去,在weex官方提供的ImageAdapter类的setImage方法中加入如下代码(*包起来的部分)
if (view.getLayoutParams().width <= 0 || view.getLayoutParams().height <= 0) { return; } ********************************* if (url.contains("/assets/")) { LoadLocalImageUtil.getInstance().dispalyFromAssets(url.replace("/assets/",""), view); return; } ********************************** if(!TextUtils.isEmpty(strategy.placeHolder)){ Picasso.Builder builder=new Picasso.Builder(WXEnvironment.getApplication()); Picasso picasso=builder.build(); picasso.load(Uri.parse(strategy.placeHolder)).into(view); view.setTag(strategy.placeHolder.hashCode(),picasso); }
最后自然是图片加载了,在vue文件中如下设置:
<image class="backgroundimage" src="assets/img/login.jpg"></image>
这样的数据结构是为了浏览器调试方便,也便于以理解,你们可以根据自己的喜好进行修改,提醒一下图片要放在android\app\src\main\assets目录下,目录层级自己定义。基本的流程就是这样,并不复杂,希望对遇到该问题的开发者有所帮助。
相关推荐
weex android实现本地图片加载image播放gif动画扩展module获取版本号 博客地址:http://blog.csdn.net/codingandroid/article/details/77719557
7. **自定义模块与组件**:如果 Weex 内置的组件和模块不能满足需求,开发者可以自定义 Android 本地模块和组件,然后在 JavaScript 代码中调用。这增强了 Weex 的扩展性。 8. **更新策略**:Weex 支持热更新,即在...
要在 Android 项目中使用 Weex,首先需要在 build.gradle 文件中添加 Weex SDK 的依赖。然后在 AndroidManifest.xml 中配置相应的权限,并在 Activity 中初始化 Weex 实例,加载对应的 Weex 页面。 3. **仿商场...
Weex由阿里巴巴开源,旨在提供一种跨平台的开发解决方案,支持iOS、Android以及Web。本案例将深入探讨如何在iOS项目中集成Weex。 首先,我们需要了解Weex的基本概念。Weex是一个基于Vue.js的移动应用开发框架,它的...
WEEX支持动态加载资源,使得应用的界面和交互更为丰富。 3. **配置文件**:如webpack.config.js,这是构建工具Webpack的配置文件,用于处理源码的打包和优化。Webpack将JavaScript、CSS、图片等资源整合成单个...
2. 扫描的二维码应包含有效的Weex页面链接,否则可能无法预览或加载页面。 3. 在扫描过程中,保持二维码与摄像头的距离适中,以便于扫描器准确识别。 4. 对于复杂的Weex页面,可能需要对ZXing库进行进一步的优化以...
Weex是阿里巴巴集团提供的一个开源项目,其目的是利用Web开发者熟悉的JavaScript语言和Vue框架等前端技术,实现一套通用的跨平台开发方案,支持Android、iOS和Web应用的开发。通过Weex,开发者可以减少为不同平台...
对于调试和问题诊断,weex-doctor插件可以帮助开发者检查本地开发环境配置是否正确,weex-debugger插件则用于在VSCode中启动Weex应用的调试工具。 Weex的这些特点和工作原理,使其成为了Vue.js前端开发者在选择...
Weex则是阿里巴巴推出的一套跨平台的前端框架,它允许开发者使用统一的Vue.js开发语法来编写原生应用,这样开发者可以同时开发iOS、Android以及Web应用,大大减少了开发成本。 二、网络信息安全在构建中的重要性 ...
BMKit 是一个用于Weex的扩展库,包含了很多实用的功能模块,如网络请求、图片加载、数据存储等,能帮助开发者更便捷地进行业务开发。 在“WeexEros-master”这个压缩包中,我们可以看到一个典型的Weex iOS项目的...
Weex是一个开源的移动跨平台开发框架,它可以让开发者用一套代码实现iOS、Android以及Web端的应用开发。而AliPlayer是阿里云提供的一个强大且功能丰富的多媒体播放器,支持多种格式的视频播放。 在这个压缩包文件...
它是Weex提供的一个用于本地数据存储的模块,可以用来存储、修改和删除数据,且数据会永久保存,除非手动清除。在H5环境下,由于使用了HTML5的LocalStorage API,存储空间限制为5MB;而在Android和iOS平台上则没有这...
- **数据源**:城市数据一般来源于数据库或者网络API,需要预先加载并存储在本地。 - **实现方式**:可以使用`ListView`、`RecyclerView`等滚动列表控件来展示城市列表,配合搜索功能方便用户快速定位。 - **多级...
性能优化是指在REACT NATIVE中使用各种技术来提高应用程序的性能,例如tcp替换http、数据本地缓存、并行加载获取数据、减少jsBundle体积、lazyload js module等。这些技术可以提高应用程序的性能和响应速度。 REACT...
- **Dart语言**: Dart代码通过AOT编译为本地机器码,这使得Flutter可以直接与平台通信,无需通过JavaScript桥接。 #### 四、Flutter的关键特点 ##### 4.1 跨平台性 - **共享代码库**: Flutter允许开发者使用一套...
- **兼容Weex原生渲染**:在App端支持Weex原生渲染,提供更流畅的交互体验。 3. **通用前端技术栈,降低学习成本** - **学习成本低**:基于Vue.js语法和微信小程序API,使得开发者能够快速上手。 - **内嵌mpvue...
- **Weex**:由阿里巴巴推出,是一种跨平台的移动应用开发方案,支持Android和iOS两大平台。 - **Chameleon**:滴滴出行发布的跨平台解决方案,支持多种终端设备。 - **Uni-app**:由DCloud开发,同样是一种跨平台的...