`

同步显示有网络图片的List

阅读更多
更新方法啦

现在通过WebView来加载图片,由于WebView会自动从cache中读取已下载过的图片,所以可以有效的复用已有资源,而且不会增加额外的代码。

不过还是有一些小缺陷
1. 必须要在layout中设定图片要显示的大小
2. 有时会看到图片会缩小

以后有机会再改进吧。

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Picture;
import android.os.AsyncTask;
import android.util.AttributeSet;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebSettings.LayoutAlgorithm;
import android.webkit.WebView;
import android.webkit.WebView.PictureListener;
import android.webkit.WebViewClient;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;

public class LoadImageSync extends RelativeLayout {

	private WebView mWebView;
	private ProgressBar mLoading;
	private ImageView mImage;

	public LoadImageSync(Context context) {
		this(context, null);
	}

	public LoadImageSync(Context context, AttributeSet attrs) {
		super(context, attrs);

		setupComponent(context);
	}

	private void setupComponent(Context context) {

		LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,
				LayoutParams.WRAP_CONTENT);
		params.addRule(RelativeLayout.CENTER_IN_PARENT);

		mLoading = new ProgressBar(context);
		mLoading.setLayoutParams(params);
		mLoading.setProgress(android.R.attr.progressBarStyleSmall);

		mImage = new ImageView(context);
		mImage.setLayoutParams(params);

		mWebView = new WebView(context);
		mWebView.setBackgroundColor(0);
		mWebView.setScrollBarStyle(0);
		mWebView.setLayoutParams(params);
		mWebView.setWebViewClient(new LoadImageWebViewClient());
		mWebView.setPictureListener(picListener);

		WebSettings webSettings = mWebView.getSettings();
		webSettings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);

		removeAllViews();
		addView(mLoading);
		addView(mWebView);
		addView(mImage);
	}

	public void setImageUrl(String url) {
		load(url);
	}

	private void load(String url) {

		new AsyncTask<String, Void, Void>() {

			@Override
			protected Void doInBackground(String... params) {

				String url = params[0];

				mWebView.loadDataWithBaseURL(null,
						getHtmlContent(url, mWebView), "text/html", "utf-8",
						null);

				return null;
			}

		}.execute(url);
	}

	private String getHtmlContent(String imageUrl, WebView view) {

		StringBuffer sb = new StringBuffer();

		sb.append("<center>");
		sb.append("<img width=\"100%\" src=\"" + imageUrl + "\" />");
		sb.append("</center>");

		return sb.toString();
	}

	private class LoadImageWebViewClient extends WebViewClient {

		@Override
		public void onReceivedError(WebView view, int errorCode,
				String description, String failingUrl) {

			mLoading.setVisibility(View.GONE);
		}

		@Override
		public void onPageStarted(WebView view, String url, Bitmap favicon) {
			mLoading.setVisibility(View.VISIBLE);
			mWebView.setVisibility(View.GONE);
			mImage.setVisibility(View.GONE);
		}

		@Override
		public void onPageFinished(WebView view, String url) {

			mWebView.setVisibility(View.VISIBLE);
			mWebView.setHorizontalScrollBarEnabled(false);
			mWebView.setVerticalScrollBarEnabled(false);

			mLoading.setVisibility(View.GONE);
		}
	}

	PictureListener picListener = new PictureListener() {

		public void onNewPicture(WebView view, Picture picture) {

			Picture pic = mWebView.capturePicture();

			int w = pic.getWidth();
			int h = pic.getHeight();

			Bitmap b = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
			final Canvas c = new Canvas(b);
			view.draw(c);

			mWebView.setVisibility(View.GONE);

			mImage.setImageBitmap(b);
			mImage.setVisibility(View.VISIBLE);
		}
	};
}


自己做了个类,用来同步显示网络图片。
放到List里,好像也能正常工作,截图如下


完整sourse一并共享,希望对大家有用。
  • 大小: 29.1 KB
分享到:
评论
1 楼 edison_cool911 2010-09-15  
兄弟,jar包啊
帮发个
谢谢
QQ:21413244

相关推荐

    Android 从网上下载图片并显示到ListView上

    在Android开发中,将网络上的图片下载并显示到ListView中是一项常见的需求,这涉及到网络请求、数据处理、UI渲染等多个技术点。以下是一份详细的步骤和技术解析: 首先,我们需要使用HTTP客户端库来发送网络请求...

    wpf 异步加载图片

    在WPF(Windows Presentation Foundation)应用开发中,异步加载图片是一项重要的技术,尤其是在处理大量或者网络图片时,能够显著提升用户体验,防止UI线程阻塞。本篇将深入探讨如何在WPF中实现异步加载图片,并...

    java的一些图片,网络编程,多线程,数据结构

    在“java的一些图片,网络编程,多线程,数据结构”这个主题中,我们可以深入探讨以下几个重要的Java编程知识点: 1. **Java 图片处理**: Java提供了多种处理图像的API,如`java.awt.image`和`javax.imageio`包。...

    WPF 图片自动播放

    Image控件的Source属性用于设置图片源,可以是本地文件路径、网络URL或资源。例如: ```xml ``` 3. **计时器**: 为了实现图片自动播放,我们需要用到计时器。WPF中没有内置的计时器控件,但我们可以使用...

    yhe.rar_anybodyux8_listctrl_进程与线程

    ListCtrl控件通常在对话框或视图类中使用,提供类似表格的布局,可以显示多列数据,并且支持多种自定义样式和功能,如图标、复选框等。在“yhe.rar”压缩包中,包含了一个名为“anybodyux8”的项目,该项目可能是一...

    ImageLoader框架加载图片于ListView上

    6. **处理网络错误**:`ImageLoader`提供了异常处理机制,当图片加载失败时,可以显示默认图片或处理错误。 通过以上步骤,我们成功地在ListView中使用`ImageLoader`框架加载了图片。这个框架不仅提高了图片加载的...

    基于Android的获取网页图片

    Android提供了多种方式显示图片,如直接使用`ImageView`加载本地资源,或者使用Glide、Picasso等第三方库加载网络图片。这里以Glide为例,它简化了图片加载过程: ```java Glide.with(context) .load(file....

    Retrofit多图片上传Demo

    这些库可以方便地从网络下载图片并显示在UI上,同时支持图片的压缩和缓存,以减少内存占用和提高性能。 5. **OkHttp集成**:Retrofit底层默认使用OkHttp作为网络请求库,OkHttp提供了高效的连接池和缓存机制,能够...

    Glide入门例子-LIstView浏览图片

    Glide是一个强大的图片加载库,它优化了图片的加载过程,提供了平滑的滚动体验,同时支持多种图片格式和网络加载。在这个入门例子中,我们将学习如何利用Glide在ListView中加载和显示图片。 1. **Glide简介** ...

    Android应用源码继人员列表,聊天的实现, 包括图片,语音.zip

    - 图片显示:使用Glide或Picasso库加载网络图片,处理缓存和占位符。 4. **语音录制与播放**: - 录音:利用Android的MediaRecorder类,设置录音参数,如采样率、编码格式等,实现语音录制。 - 文件存储:将录制...

    柯林8.0_3g版--wap1.0与wap2.0同步切换

    在这样的背景下,"同步切换"功能意味着该软件或服务能够根据网络条件自动或手动在WAP1.0和WAP2.0之间切换,确保用户无论在网络覆盖较弱还是较强的地方都能获得稳定的服务。 从压缩包文件的名称来看,我们可以推测这...

    ExpandableListView仿QQ好友列表

    8. **数据同步**:如果应用需要实时更新好友列表,可能需要实现后台数据同步功能,例如使用`AsyncTask`或者`Retrofit`进行网络请求,获取最新的好友信息并更新到`ExpandableListView`。 通过以上步骤,你可以实现一...

    搜图客户端

    4. 客户端接收到响应,使用GSON将JSON数据解析成Java对象,例如一个包含多条图片信息的List。 5. 解析后的数据可以显示在UI上,比如在一个RecyclerView中展示图片预览和相关描述。 6. 用户点击图片后,可能会展开大...

    todo list_微信小程序模板js代码前台前端H5页面源码.rar

    6. **样式设计与响应式布局**:使用WXSS编写适应不同设备和屏幕尺寸的样式规则,确保应用在不同设备上都有良好的显示效果。 7. **调试与发布**:学会使用微信开发者工具进行调试和预览,了解发布流程和配置要求。 ...

    AndroidMediaPlayer

    在这个项目中,我们看到涉及了多个与音乐播放器相关的技术点,包括本地服务器配置、下载列表管理、歌手头像同步显示、远程下载、本地播放、播放列表操作以及播放控制和同步歌词显示。下面将对这些知识点进行详细介绍...

    android 的网页抓取

    这里,`imageView`是你想要显示图片的ImageView,`imageUrl`是图片的URL,`placeholder`是加载中的占位图,`ic_dialog_alert`是加载失败时的图标。 如果网页中的图片链接是相对路径,需要将其转换为绝对路径。可以...

    C#可换皮肤的音乐播放器(支持歌词显示)

    3. **歌词显示**:音乐播放器的歌词同步功能是现代播放器的常见特性。开发者需要集成歌词文件解析库,如LRC格式,将歌词与音乐时间轴匹配。C#可以利用字符串操作和时间戳处理来实现实时滚动的歌词效果。 4. **播放...

    android用ViewFlow实现轮播图功能

    在这个例子中,我们可能需要显示图片,所以可以使用`ImageView`来显示图片,并利用`Glide`或`Picasso`等图片加载库来加载网络资源: ```java public class CarouselAdapter extends BaseAdapter { private Context ...

Global site tag (gtag.js) - Google Analytics