Android编程实现下载图片及在手机中展示的方法
作者:蓝之风 时间:2023-10-26 12:30:59
本文实例讲述了Android编程实现下载图片及在手机中展示的方法。分享给大家供大家参考,具体如下:
在项目开发中从互联网上下载图片是经常用到的功能,再次总结一下
1.普通的下载方式
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView android:src="@drawable/icon"
android:layout_width="wrap_content"
android:id="@+id/imgPic"
android:layout_gravity="center|center_vertical"
android:layout_height="fill_parent">
</ImageView>
</LinearLayout>
java文件
public class DownloadImage extends Activity {
private ImageView imgPic;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.download_image);
imgPic = (ImageView) findViewById(R.id.imgPic);
String url = "http://ww1.sinaimg.cn/bmiddle/6834c769jw1djjf4p3p9rj.jpg";
loadRmoteImage(url);
}
/**
* @param imgUrl
* 远程图片文件的URL
*
* 下载远程图片
*/
private void loadRmoteImage(String imgUrl) {
URL fileURL = null;
Bitmap bitmap = null;
try {
fileURL = new URL(imgUrl);
} catch (MalformedURLException err) {
err.printStackTrace();
}
try {
HttpURLConnection conn = (HttpURLConnection) fileURL
.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
int length = (int) conn.getContentLength();
if (length != -1) {
byte[] imgData = new byte[length];
byte[] buffer = new byte[512];
int readLen = 0;
int destPos = 0;
while ((readLen = is.read(buffer)) > 0) {
System.arraycopy(buffer, 0, imgData, destPos, readLen);
destPos += readLen;
}
bitmap = BitmapFactory.decodeByteArray(imgData, 0,
imgData.length);
}
} catch (IOException e) {
e.printStackTrace();
}
imgPic.setImageBitmap(bitmap);
}
2.带进度条的下载
有时候网络差,或者是图片太大,会出现黑屏的情况,用户体验比较差,那么增加一个进度条是提高用户体验的好方法
/**
* @author xushilin xsl xushilin@kingtoneinfo.com
* @version: 创建时间:2011-7-27 下午02:55:56
* 说 明: android中下载图片
* 修改历史:
*/
public class DownloadImage extends Activity {
private ImageView imgPic;
private ProgressBar progressBar;
private int totalSize=0;
private int size=0;
private Handler mHandler;
String url = "http://ww1.sinaimg.cn/bmiddle/6834c769jw1djjf4p3p9rj.jpg";
private Bitmap bitmap=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.download_image);
imgPic = (ImageView) findViewById(R.id.imgPic);
progressBar = (ProgressBar) findViewById(R.id.progressBar);
progressBar.setProgress(getProgressInt(progressBar.getMax()));
mHandler = new Handler() {
public void handleMessage(Message msg) {
progressBar.setProgress(getProgressInt(progressBar.getMax()));
if(bitmap!=null){
imgPic.setImageBitmap(bitmap);
}
}
};
new Thread(){
public void run(){
loadRmoteImage(url);
}
}.start();
}
/**
* @param imgUrl
* 远程图片文件的URL
*
* 下载远程图片
*/
private void loadRmoteImage(String imgUrl) {
URL fileURL = null;
try {
fileURL = new URL(imgUrl);
} catch (MalformedURLException err) {
err.printStackTrace();
}
try {
HttpURLConnection conn = (HttpURLConnection) fileURL
.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
int length = (int) conn.getContentLength();
totalSize=length;
if (length != -1) {
byte[] imgData = new byte[length];
byte[] buffer = new byte[512];
int readLen = 0;
int destPos = 0;
while ((readLen = is.read(buffer)) > 0) {
System.arraycopy(buffer, 0, imgData, destPos, readLen);
destPos += readLen;
size=destPos;
mHandler.sendEmptyMessage(1);
Thread.sleep(100);
}
bitmap = BitmapFactory.decodeByteArray(imgData, 0,
imgData.length);
mHandler.sendEmptyMessage(1);
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private int getProgressInt(int max) {
int result = (totalSize > 0) ? (int) (size * max * 1.0 / totalSize) : 0;
return result;
}
}
效果如下:
下载过程:
下载完成:
希望本文所述对大家Android程序设计有所帮助。
标签:Android,下载图片,展示
0
投稿
猜你喜欢
浅谈java多态的实现主要体现在哪些方面
2023-08-17 07:41:32
Java中反射动态 代理接口的详解及实例
2023-11-28 05:29:36
C# Color.FromArgb()及系统颜色对照表一览
2021-05-24 08:21:02
Android自定义View实现闪耀字体效果
2023-05-10 02:27:43
C# zxing二维码写入的实例代码
2021-09-01 12:23:26
关于JAVA11中图片与BASE64相互转换的实现
2022-12-06 06:44:11
详解Android更改APP语言模式的实现过程
2023-05-18 16:56:35
java isInterrupted()判断线程的实例讲解
2023-07-21 01:45:53
java中Class.getMethods()和Class.getDeclaredMethods()方法的区别
2021-05-28 23:05:46
springboot 无法自动装配的问题
2021-05-29 06:14:30
Java使用WatchService监控文件内容变化的示例
2023-02-15 10:10:19
Springboot如何使用mybatis实现拦截SQL分页
2021-08-15 13:16:56
Java如何实现压缩文件与解压缩zip文件
2022-01-28 09:14:00
利用Java实现简单的词法分析器实例代码
2023-10-06 08:14:45
详解Java的Spring框架中的事务管理方式
2022-02-03 13:57:47
idea热部署插件jrebel正式版及破解版安装详细图文教程
2023-05-27 03:28:59
Unity实现打砖块游戏
2023-12-06 04:45:04
一文带你学会规则引擎Drools的应用
2022-04-03 08:40:59
使用idea+gradle编译spring5.x.x源码分析
2022-05-13 15:13:31
Android实现ListView控件的多选和全选功能实例
2023-01-04 02:26:50