使用 AsyncTask 下载图片,并在下载前设置本地图片显示
来源:互联网 发布:植物大战僵尸源码 编辑:程序博客网 时间:2024/05/21 11:35
使用 AsyncTask 在后台线程中下载数据。AsyncTask 是个封装类,它通过一个内部的线程池管理线程的并发。除了管理后台线程外,在操作执行前,中,后都会提供回调方法(不要在 doInBackground() 中更新视图)。
下面是一个简单的例子,效果如下(AndroidStudio 1.5):
实现下载图片并显示的类:
NetImageView.java :
package com.crazy.asyncdownload;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.os.AsyncTask;import android.util.AttributeSet;import android.widget.ImageView;import java.io.BufferedInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.URL;import java.net.URLConnection;public class NetImageView extends ImageView { private Drawable mHolder, mImage; public NetImageView(Context context) { this(context, null); } public NetImageView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public NetImageView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } // 在下载完成之前,在要显示图片的位置先提供一个本地的图片 public void setHolderImage(Drawable drawable) { mHolder = drawable; if (mImage == null) { setImageDrawable(mHolder); } } // 在下载完成之前,在要显示图片的位置先提供一个本地的图片 public void setHolderImage(int resId) { mHolder = getResources().getDrawable(resId); if (mImage == null) { setImageDrawable(mHolder); } } public void setImageUrl(String url) { DownloadTask task = new DownloadTask(); task.execute(url); } private class DownloadTask extends AsyncTask<String, Void, Bitmap> { @Override protected Bitmap doInBackground(String... params) { String url = params[0]; try { URLConnection connection = (new URL(url)).openConnection(); InputStream is = connection.getInputStream(); BufferedInputStream bis = new BufferedInputStream(is); ByteArrayOutputStream baos = new ByteArrayOutputStream(50); int b = 0; while ((b = bis.read()) != -1) { baos.write((byte)b); } byte[] imageData = baos.toByteArray(); return BitmapFactory.decodeByteArray(imageData, 0, imageData.length); } catch (IOException e) { return null; } } @Override protected void onPostExecute(Bitmap bitmap) { mImage = new BitmapDrawable(getContext().getResources(), bitmap); if (mImage != null) { setImageDrawable(mImage); } } }}
MainActivity.java :
package com.crazy.asyncdownload;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.Toolbar;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); NetImageView imageView = (NetImageView)findViewById(R.id.netImage); imageView.setHolderImage(R.drawable.ic_launcher); imageView.setImageUrl("http://img.ivsky.com/img/tupian/pre/201509/02/erhai_shenguang.jpg"); }}
content_main.xml :
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context="com.crazy.asyncdownload.MainActivity" tools:showIn="@layout/activity_main"> <com.crazy.asyncdownload.NetImageView android:id="@+id/netImage" android:layout_width="wrap_content" android:layout_height="wrap_content" /></RelativeLayout>
在 AndroidManifest.xml 中注册权限:
<uses-permission android:name="android.permission.INTERNET"/>
0 0
- 使用 AsyncTask 下载图片,并在下载前设置本地图片显示
- 使用AsyncTask下载图片并显示进度条
- httpclient+asynctask下载图片并保存在本地
- 使用AsyncTask下载图片并更新进度
- Android使用AsyncTask下载显示图片
- 使用AsyncTask下载图片
- AsyncTask下载网络图片并显示下载进度
- Android 使用URL下载图片到本地并显示
- android 下载图片到本地并显示
- 使用okhttp异步下载图片,保存到本地,并在系统相册中显示
- unity 下载图片使用并保存在本地
- AsyncTask下载图片、显示进度
- 运用AsyncTask下载图片并显示下载进度,下载完成后显示
- 使用异步任务下载图片并显示在UI上
- AsyncTask 的简单使用,给定一个uri地址下载图片,并显示进度条
- android开发实现下载网页图片到本地并显示
- android网上下载图片存在本地并在Listview上显示
- Android下载网络图片并保存在本地相册
- shadowColor 图片阴影 iOS
- mutating的使用(swift2.0)
- Python异常
- 快速排序--过程详解
- Linux下的五种I/O模型
- 使用 AsyncTask 下载图片,并在下载前设置本地图片显示
- Gradle-Eclipse插件安装
- 文件压缩与解压缩
- 隐藏和现实导航栏
- Javascript-类-模块化[面向对象已经无处不在]
- 用例子解释:如何设置CLASSPATH(Java)
- AIM documentation templates
- 响应式web设计
- 操作SQL Server数据源