android webview 加载过程,实战:七步完成Android Webview图片加载
【IT168技术】在本教程中,我们将一步步学习如何使用Android中的WebView控件去展现图片,并且进行相关的参数设置,也会学习各种将图片导入到WebView的参数,包括从其他web站点加载图片,以及从移动设备中和应用的目录中加载图片。本文的阅读对象为有初级Android编程经验的开发者,本文的代码可以在如下地址下载:
步骤1 创建Android工程
首先在eclipse中创建一个Android工程,然后在main Activity类中,或者在想要显示图片的Activity中,增加如下的类库引入:
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.widget.Button;
当然,这还取决于如何加载图片的方法,比如要通过网络加载图片的话,则需要设置相关的互联网权限,这在Manifest文件中进行配置就可以了,如下:
步骤2 建立APP界面
我们准备在Linear Layout中使用单一个页面去展示不同的图片,在主界面的布局文件中,添加以下代码:
在上面的布局中,首先添加如下的webview控件,代码如下:
接下来,我们会使用三个不同的按钮,用来显示三种加载图片的方式,代码如下:
android:id="@+id/pick_btn"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/pick"/>
android:id="@+id/load_btn"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/load"/>
android:id="@+id/app_btn"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/local"/>
同样,需要在res/values目录下,为三个按钮声明一下显示的文字的资源,如下:
GalleryWebApp
步骤三 准备加载图片的代码
下面先来学习如何在webview中加载图片。首先修改PictureViewerActivity类如下,加上webview控件的声明:
publicclass PictureViewerActivity extends Activity implements OnClickListener
{privateWebView picView;
@Overridepublicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
接下来获得webview控件的引用,如下:
picView = (WebView)findViewById(R.id.pic_view);
picView.setBackgroundColor(0);
这个将设置webview控件的背景颜色为白色,然后在oncreate方法后,写出onclick的框架代码:
public void onClick(View v) {
}
我们将在这个onClick方法中,添加分别处理三个按钮的事件代码:
步骤4 从图库中加载图片
下面我们先来学习如何从移动设备的图库中加载图片,首先在类的声明部分,在oncreate方法前,先添加一个实例变量:
private final int IMG_PICK = 1;
这个实例变量的作用,是当用户从移动设备的图库中选择了图片后,返回给主程序时用的标识。同时在oncreate方法中,添加第一个按钮pickBtn,为其绑定onclicklistner事件
Button pickBtn = (Button)findViewById(R.id.pick_btn);
pickBtn.setOnClickListener(this);
然后在onclick方法中,添加其事件的响应代码如下:
if(v.getId()==R.id.pick_btn) {
Intent pickIntent=newIntent();
pickIntent.setType("image/*");
pickIntent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(pickIntent,"Select Picture"), IMG_PICK);
}
这段代码将通过新创建一个Intent的方法,调用移动设备上的读取图片的应用,这取决于用户的设备上安装了什么样的浏览图片的应用,比如下图是其中一种情况:
当用户选择了一张图片后,将会返回原来的应用,这个时候将触发
onActivityResult方法,先添加如下的框架代码:
protected void onActivityResult(intrequestCode,intresultCode, Intent data) {if(resultCode==RESULT_OK) {
}
}
在其中的if判断分支中,我们添加如下的代码,
if (requestCode == IMG_PICK) {
}
在这个分支中,将判断用户是否从我们刚建立的intent中选择图片后返回的,并且添加相关的代码,将返回的图片的物理路径返回给webview控件进行加载,代码如下:
StringimagePath="";String[] imgData={ MediaStore.Images.Media.DATA };
Cursor imgCursor=managedQuery(pickedUri, imgData,null,null,null);if(imgCursor!=null) {intindex=imgCursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
imgCursor.moveToFirst();
imagePath=imgCursor.getString(index);
}elseimagePath=pickedUri.getPath();
picView.loadUrl("file:///"+imagePath);
运行应用,则用户可以从移动设备已有的图库中加载图片,并且在webview控件中予以显示,如下图:
步骤5 从web中加载获得图片
我们在第2个按钮中的onclick事件中,写入如下代码,则可以很容易的从互联网中的任意一个地方加载一张图片,并装载到webview控件中去,代码如下:
Button loadBtn = (Button)findViewById(R.id.load_btn);
loadBtn.setOnClickListener(this);
并在onClick事件中添加第二个if分支进行判断,代码如下:
else if(v.getId() == R.id.load_btn) {
picView.loadUrl("http://developer.android.com/images/brand/google_play_logo_450.png");
这里通过使用webview控件的loarUrl方法,可以很容易地获得互联网中的一张图片。运行程序可以看到能正确加载互联网中的一张图片,如下图:
步骤6 从app应用的目录中加载图片
有的时候,可能需要从已经存在的app应用中加载已经有的图片到webview中去,下面介绍两个方法,首先假设图片是放在android_asset目录下的,则可以依然通过loadUrl方法进行图片加载,如下:
Button appBtn=(Button)findViewById(R.id.app_btn);
appBtn.setOnClickListener(this);
然后在onclick方法中增加第3个if 分支,代码如下:elseif(v.getId()==R.id.app_btn) {
picView.loadUrl("file:///android_asset/mypicture.jpg");
}
另外,由于webview控件显示的是html页面,所以也可以先建立一个html页面,然后其中嵌套入一张图片,代码如下:
然后再通过webview控件加载html页面,如下:
picView.loadUrl("file:///android_asset/imagepage.html");
步骤7 设置webview中图片加载时的属性
我们还可以设置webview控件中的图片加载时的属性,以加强交互,比如可以在在oncreate事件中,添加如下代码:
picView.getSettings().setBuiltInZoomControls(true);
picView.getSettings().setUseWideViewPort(true);
这将可以设置用户能在webview控件中能使用图片放大器对图片进行放大缩小和水平左右移动的操作,如下图:
小结
本文总结了在Android的webview控件中加载图片的三种方法,分别是通过图片选择器选择,加载互联网中的图片以及加载设备中的资源图片文件。
android webview 加载过程,实战:七步完成Android Webview图片加载相关推荐
- Android开发教程 - 使用Data Binding(七)使用BindingAdapter简化图片加载
本系列目录 使用Data Binding(一)介绍 使用Data Binding(二)集成与配置 使用Data Binding(三)在Activity中的使用 使用Data Binding(四)在Fr ...
- onready怎么加img_用插件VMarker在vue中给图片加标记
插件VMarker:Vmarker是基于ui-picture-bd-marker的vue封装,当Vmarker不足并存在现有要求或难以基于Vmarker扩展,此时可以绕过Vmarker进行扩展,直接使 ...
- 数仓实战|两步搞定Hive数据加载到Greenplum
如果说Hive是离线数仓的代表,那么Greenplum就是MPP数据库的代表.在离线数仓的年代,以Hive为核心的数据仓库席卷数据仓库市场,几乎成为了离线数仓的代名词.但是Hive的查询能力非常弱,通 ...
- 微博的自定义Android,Android ProgressBar 自定义样式(二),仿原来新浪微博图片加载样式...
如: 在xml布局文件中设置: android:id="@+id/progressBar1" style="?android:attr/progressBarStyleH ...
- Android图片加载框架最全解析(七),实现带进度的Glide图片加载功能
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/78357251 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭 ...
- Android图片加载库的封装实战
重磅更新 2017-02-16 2017-05-09 优化圆形图片加载 更新demo 前言 主流图片加载库的对比 Android-Universal-Image-Loader Picasso Glid ...
- 重温.NET下Assembly的加载过程 ASP.NET Core Web API下事件驱动型架构的实现(三):基于RabbitMQ的事件总线...
重温.NET下Assembly的加载过程 最近在工作中牵涉到了.NET下的一个古老的问题:Assembly的加载过程.虽然网上有很多文章介绍这部分内容,很多文章也是很久以前就已经出现了,但阅读之后发现 ...
- 重温.NET下Assembly的加载过程
最近在工作中牵涉到了.NET下的一个古老的问题:Assembly的加载过程.虽然网上有很多文章介绍这部分内容,很多文章也是很久以前就已经出现了,但阅读之后发现,并没能解决我的问题,有些点写的不是特别详 ...
- Android图片加载到底哪家强
图片加载几乎是任何 Android 项目中必备的需求,而图片加载的开源库也越来越多,我们姑且在 GitHub 上搜索下 android image 关键字,出来的前五个按照 Star 数排序的项目如下 ...
- Android图片加载神器之Fresco,基于各种使用场景的讲解
Fresco是Facebook开源Android平台上一个强大的图片加载库,也是迄今为止Android平台上最强大的图片加载库. 优点:相对于其他开源的第三方图片加载库,Fresco拥有更好的内存管理 ...
最新文章
- UI培训教程分享:常用的商业插画风格有哪些?
- Simulink仿真---PMSM滞环电流控制仿真模型学习
- 【Google Play】App Bundle 使用详解 ( 简介 | 应用内更新 | 即时更新 | 灵活更新 )
- Linux上创建一个用户,并给该用户指定目录的权限,修改时区
- MySQL复制性能优化
- epson彩色打印机加墨水_爱普生打印机墨盒如何加墨?
- Linux基础学习六:Nginx的使用教程
- 03-21 webview 性能分析
- 配置 Ubuntu 字符界面启动
- 从一个商业产品设计学习oCPC核心知识点
- 2022年二级建造师建设工程法规及相关知识考试每日一练及答案
- 关于SaaS平台中应对多租户模式的设计
- windows如何创建计划任务并在窗口界面隐藏运行
- 交换机配置软件具有的作用
- jsp 简单的登陆界面(不连数据库)
- 数据结构——实现双栈操作
- 移动SEO之页面优化
- 信管通低代码快速开发工具简介(一)
- DotNetTextBox V3.0 所见即所得编辑器控件Ver3.2.8 Free(免费版)
- HI3559V200获取IMX458摄像头数据_(2)sdk例程sample_vio
热门文章
- Informix数据库查询表的锁级别
- WESHOP | 基于微服务的小程序商城系统
- pip‘s dependency resolver does not currently take into account 解决办法
- R绘图基础指南 | 1.条形图
- 2021-11-26 pyautogui 配合雷电模拟器实现手机APP签到答题自动化
- 红警地图编辑器的使用方法
- UL 2271-2018 标准轻型电动车用锂电池 最新发行中文、英文版,ANSI/CAN/ULC/UL 2271-2018
- php封装成应用系统吗,用Portal来集成外部应用程序_php
- [AtCoder ARC093F]Dark Horse
- 生活美学 | 8种咖啡冲煮器具分别有什么特点