- 浏览: 60406 次
- 性别:
- 来自: 贵阳
文章分类
最新评论
-
feisuzhu:
Don't roll your own.这个是铁律。楼主要是学 ...
AES加解密算法(使用Base64做转码以及辅助加密) -
osacar:
这里DES还是AES???
AES加解密算法(使用Base64做转码以及辅助加密) -
1336224635:
着些不都是16进制表示的颜色吗?android 对颜色有要求吗 ...
android--color.xml
这个例子是利用AsyncTask异步下载图片,下载时先将网络图片下载到本地cache目录保存,以imagUrl的图片文件名保存,如果有同名文件在cache目录就从本地加载。
布局文件,先用一个图片占位:
图片异步加载:
常用图片处理方法:
配置文件:
布局文件,先用一个图片占位:
<ImageView android:id="@+id/image" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center_horizontal" android:layout_marginTop="20dip" android:src="@drawable/product_default_icon" />
private Context context = AsyncTaskDemo.this; private ImageView image; //图片地址 private String imageUrl = "http://dl.iteye.com/upload/attachment/0080/1571/2b9a099a-0a7b-3a60-909e-97a8316716cb.jpg"; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.asynctask); getWidget(); loadImage(imageUrl); } /** 获得组件 */ public void getWidget() { image = (ImageView) findViewById(R.id.image); } private void loadImage(final String imageUrl) { ImageAsyncLoader asyncImageLoader = new ImageAsyncLoader(); // 异步加载图片 Drawable cachedImage = asyncImageLoader.loadDrawable(context, imageUrl, new ImageCallback() { public void imageLoaded(Drawable imageDrawable, String imageUrl) { if (imageDrawable != null) { image.setImageDrawable(ImageAsyncLoader.zoomDrawable(imageDrawable, ImageAsyncLoader.dip2px(context, 150), ImageAsyncLoader.dip2px(context, 150))); } } }); if (cachedImage != null) {image.setImageDrawable(ImageAsyncLoader.zoomDrawable(cachedImage, ImageAsyncLoader.dip2px(context, 150), ImageAsyncLoader.dip2px(context, 150))); } }
图片异步加载:
/** * SoftReference的主要特点是据有较强的引用功能。 * 只有当内存不够的时候,才进行回收这类内存,因此在内存足够的时候,它们通常不被回收。 * 另外,这些引用对象还能保证在Java抛出OutOfMemory 异常之前,被设置为null。 * 它可以用于实现一些常用图片的缓存,实现Cache的功能,保证最大限度的使用内存而不引起OutOfMemory。 */ private HashMap<String, SoftReference<Drawable>> cacheMap = null; private BlockingQueue<Runnable> queue = null; private ThreadPoolExecutor executor = null; public interface ImageCallback { public void imageLoaded(Drawable imageDrawable, String imageUrl); } public ImageAsyncLoader() { cacheMap = new HashMap<String, SoftReference<Drawable>>(); /** * 一个基于已链接节点的、范围任意的 blocking queue。 * 此队列按 FIFO(先进先出)排序元素。 * 队列的头部 是在队列中时间最长的元素。 * 队列的尾部 是在队列中时间最短的元素。 * 新元素插入到队列的尾部,并且队列检索操作会获得位于队列头部的元素。 * 链接队列的吞吐量通常要高于基于数组的队列,但是在大多数并发应用程序中,其可预知的性能要低。 */ queue = new LinkedBlockingQueue<Runnable>(); /** * 线程池维护线程的最少数量2 <br> * 线程池维护线程的最大数量10<br> * 线程池维护线程所允许的空闲时间180秒 */ executor = new ThreadPoolExecutor(2, 10, 180, TimeUnit.SECONDS, queue); } public Drawable loadDrawable(final Context context, final String imageUrl, final ImageCallback imageCallback) { if (cacheMap.containsKey(imageUrl)) { SoftReference<Drawable> softReference = cacheMap.get(imageUrl); Drawable drawable = softReference.get(); if (drawable != null) { return drawable; } } final Handler handler = new Handler() { public void handleMessage(Message message) { imageCallback.imageLoaded((Drawable) message.obj, imageUrl); } }; // 将任务添加到线程池 executor.execute(new Runnable() { public void run() { // 根据URL加载图片 Drawable drawable = loadImageFromUrl(context, imageUrl); // 图片资源不为空是创建软引用 if (null != drawable) cacheMap.put(imageUrl, new SoftReference<Drawable>(drawable)); Message message = handler.obtainMessage(0, drawable); handler.sendMessage(message); } }); return null; } // 网络图片先下载到本地cache目录保存,以imagUrl的图片文件名保存,如果有同名文件在cache目录就从本地加载 public static Drawable loadImageFromUrl(Context context, String imageUrl) { Drawable drawable = null; if (imageUrl == null) return null; String fileName = ""; // 获取url中图片的文件名与后缀 if (imageUrl != null && imageUrl.length() != 0) { fileName = imageUrl.substring(imageUrl.lastIndexOf("/") + 1); } // 根据图片的名称创建文件(不存在:创建) File file = new File(context.getCacheDir(), fileName); // 如果在缓存中找不到指定图片则下载 if (!file.exists() && !file.isDirectory()) { try { // 从网络上下载图片并写入文件 FileOutputStream fos = new FileOutputStream(file); InputStream is = new URL(imageUrl).openStream(); int data = is.read(); while (data != -1) { fos.write(data); data = is.read(); } fos.close(); is.close(); drawable = Drawable.createFromPath(file.toString()); } catch (IOException e) { e.printStackTrace(); } } // 如果缓存中有则直接使用缓存中的图片 else { drawable = Drawable.createFromPath(file.toString()); } return drawable; }
常用图片处理方法:
/** * 缩放Drawable * * @param drawable * @param w 缩放后的宽 * @param h 缩放后的高 * @return Drawable */ public static Drawable zoomDrawable(Drawable drawable, int w, int h) { int width = drawable.getIntrinsicWidth(); int height = drawable.getIntrinsicHeight(); // drawable转换成bitmap Bitmap oldbmp = drawableToBitmap(drawable); // 创建操作图片用的Matrix对象 Matrix matrix = new Matrix(); // 计算缩放比例 float scaleWidth = ((float) w / width); float scaleHeight = ((float) h / height); matrix.postScale(scaleWidth, scaleHeight); // 设置缩放比例 Bitmap newbmp = Bitmap.createBitmap(oldbmp, 0, 0, width, height, matrix, true); return new BitmapDrawable(newbmp); } /** * 将drawable转换成bitmap * * @param drawable * @return Bitmap */ private static Bitmap drawableToBitmap(Drawable drawable) { // 取drawable的长宽 int width = drawable.getIntrinsicWidth(); int height = drawable.getIntrinsicHeight(); Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565; // 取drawable的颜色格式 Bitmap bitmap = Bitmap.createBitmap(width, height, config); Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, width, height); drawable.draw(canvas); return bitmap; } /** * 单位转换:dip => px * * @param ctx 上下文环境 * @param dipValue * @return */ public static int dip2px(Context ctx, int dipValue) { final float scale = ctx.getResources().getDisplayMetrics().density; return (int) (dipValue * scale); }
配置文件:
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" />
发表评论
-
ContentProvider
2013-04-19 17:12 1085ContentProvider是安卓平台中,在不同应用程序之间 ... -
sqlite使用
2013-04-19 16:52 1237import android.content.Contex ... -
我的Android小应用
2012-12-05 12:00 834工作之余,做了一款小android应用,是关于移动业务查询的( ... -
通过百度API获取经纬度
2012-06-29 15:43 1505第一步,先要导入百度API的架包libBMapApiEngin ... -
移动设备开发中WebService的详解
2012-06-17 11:15 1729看到有很多朋友对WebService还不是很了解,在此就详细的 ... -
Android 定位的三种方式
2012-06-11 17:17 1165// 声明LocationManager对象 ... -
android手机获取gps和基站的经纬度地址
2012-05-21 11:02 2077<--界面--> <?xml versi ... -
android调用系统照相机返回到页面,保存到本地和把图片转换成字符串
2012-05-21 10:28 2670本程序能通过调用android自带的照相机,返回图片到imag ... -
android上的MD5和RSA的加解密
2012-04-18 20:03 2810import java.io.UnsupportedEnc ... -
android--加载本地联系人
2012-04-09 10:30 1764首先先建布局文件,界面很简单,就是一个搜索框和下面的联系人列表 ... -
android--Handler的使用
2012-04-09 09:56 1795Handler基本概念: Handler主要用 ... -
android应用-创建快捷方式
2012-04-06 14:32 1508我们开发一款软件后,如果手机装的软件过多,去翻的话会很难翻的, ... -
APK的发布
2012-04-05 16:51 12991数字签名 Android系统 ... -
android应用-在线版本升级
2012-04-05 15:42 1659首先配置服务器有关的地址:(如下) public stat ... -
模拟器和真机连接tomcat的区别
2012-04-05 15:39 1210//系统要连接的WebService接口地址 private ...
相关推荐
本资料包主要讲解了如何使用`AsyncTask`进行异步加载图片,这对于在UI线程中保持流畅用户体验至关重要。 `AsyncTask`是Android SDK中的一个类,它为开发者提供了简单的多线程和回调功能。它的核心思想是将长时间...
在Android开发中,异步加载图片是一个常见的需求,特别是在处理用户界面时,为了提供良好的用户体验,我们需要在后台线程执行耗时操作,如从网络下载图片,然后在UI线程更新视图。`AsyncTask`是Android提供的一个轻...
以下是一个简单的示例,展示如何使用`AsyncTask`下载图片并显示进度: ```java public class DownloadImageTask extends AsyncTask, Integer, Bitmap> { private ProgressBar progressBar; private ImageView ...
`AsyncTask`是Android提供的一种轻量级的异步处理工具,特别适合用来进行短时间的后台操作,如网络请求、图片下载等。本示例将详细介绍如何使用`AsyncTask`来实现图片的异步下载。 首先,`AsyncTask`有三个泛型参数...
本篇文章将深入探讨如何在Android中使用`AsyncTask`来异步加载网络图片。 首先,我们了解`AsyncTask`的基本结构。`AsyncTask`有三个泛型参数:`Params`, `Progress`, 和 `Result`。在本例中,`Params`通常是网络...
在本教程“Android AsyncTask 异步下载 提高篇”中,我们将深入探讨`AsyncTask`的高级用法和最佳实践,以优化图片下载的性能。 首先,`AsyncTask`包含三个泛型参数:`Params`、`Progress`和`Result`。`Params`表示...
`AsyncTask`是Android提供的一种轻量级的异步任务处理框架,特别适用于执行耗时的操作,如网络请求、文件下载或图片加载等。本篇文章将深入讲解如何使用`AsyncTask`进行图片的异步下载。 `AsyncTask`类包含三个泛型...
总结,`Android用AsyncTask异步加载图片`涉及到的关键技术点包括:`AsyncTask`的生命周期、后台线程执行、UI线程更新、图片的网络加载以及进度条的控制。通过合理运用这些技术,可以提高应用的响应速度,提升用户...
AsyncTask的使用及ListView的常见优化 asyncTask异步加载数据 使用了LruCache优化图片加载 通过滑动监听提高ListView滑动流畅度.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习...
在这个例子中,我们将探讨如何使用AsyncTask来实现图片的异步加载,并结合进度条展示下载进度。 首先,AsyncTask有三个泛型参数:Params, Progress, Result。Params代表执行任务前可以输入的参数类型,Progress代表...
在本文中,我们将深入探讨如何使用`AsyncTask`来实现异步读取网络图片。 首先,我们创建一个新的Android项目,并在`activity_main.xml`布局文件中设置一个`GridView`,用于展示加载的网络图片。`GridView`通常用来...
在提供的资源中,"android录音上传到服务器,上传使用AsyncTask异步任务.rar" 提到了使用AsyncTask来处理这一问题。下面,我们将深入探讨Android系统中的这些功能及其与AsyncTask的结合使用。 1. **拍照上传**: ...
Android 的 UI 线程主要负责处理用户的按键事件、触屏事件等。...但由于新线程不允许直接更新山 I 组件,为了解决这个问题,Android 提供了异步任务 (AsyncTask) 的方式实现异步线程的操作。
本篇文章将详细探讨如何使用`AsyncTask`来实现网络图片的下载,并且展示进度条提示。 `AsyncTask`有三个泛型参数,分别是Params、Progress和Result。Params表示后台任务接收的输入参数类型,Progress表示后台任务的...
"Asynctask异步加载的使用"这一主题涵盖了如何利用Android SDK中的AsyncTask类来实现后台任务的执行,并在UI线程更新结果。以下是对这个知识点的详细讲解: AsyncTask是Android提供的一种轻量级的异步处理机制,...
在这个“一个AsyncTask异步任务的操作实例”中,我们将深入探讨AsyncTask的工作原理、使用方法以及如何在实际项目中应用。 1. **AsyncTask基本结构**: AsyncTask由三个泛型参数定义:`Params`, `Progress`, 和 `...
尽管如此,理解如何在`Gallery`中实现异步批量加载图片仍然是一个重要的知识点,尤其是对于理解Android应用性能优化和数据加载策略。 在Android中,`AsyncTask`是一个轻量级的后台处理机制,常用于执行耗时操作,如...
这个`AsyncTaskDemo`应该包含了一个示例,展示了如何利用`AsyncTask`来实现网络图片的加载,同时可能包含了进度条的显示以提供用户反馈。 首先,`AsyncTask`有三个泛型参数:`Params`,`Progress`和`Result`。在...