1.布局xml文件

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

tools:context=".MainActivity" >

<Button

android:id="@+id/btn"

android:onClick="download"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="点击循环加载网上图片" />

<ImageView

android:id="@+id/iv"

android:layout_below="@id/btn"

android:layout_height="match_parent"

android:layout_width="match_parent"

/>

</RelativeLayout>

2.优化工具类ImageCach.java
package com.example.day15_ex_loadimage;
 
import java.util.HashMap;
 
import android.graphics.Bitmap;
/**
 * 图片下载存储优化工具类
 * @author Administrator
 *
 */
public class ImageCach {
    //存储url 和  图片解析流 Bitmap对象
public static HashMap<String,Bitmap>map=new HashMap<String, Bitmap>();
    //获取Bitmap对象
public static Bitmap getBitmap(String urlPath){
     return ImageCach.map.get(urlPath);
    }
//存放url Bitmap
public void put(String urlPath,Bitmap bm){
ImageCach.map.put(urlPath, bm);
}
    
}
3.联网获取图片类 HttpUtils.java
package com.example.day15_ex_loadimage;
 
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
 
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
 
public class HttpUtils {
    public static Bitmap getBitmap(String urlPath){
     Bitmap bm=null;
     bm=ImageCach.getBitmap(urlPath);//优化  防止重复下载
     if(bm==null){
     try {
URL url=new URL(urlPath);
HttpURLConnection conn=(HttpURLConnection) url.openConnection();
InputStream in=conn.getInputStream();
bm=BitmapFactory.decodeStream(in);
    ImageCach.map.put(urlPath, bm);
    Log.e("img","img");
    in.close();
    conn.disconnect();
     } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
     }
     return bm;
    }
}
4.实现类 MainActivity.java
package com.example.day15_ex_loadimage;
 
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.LoaderManager;
import android.app.LoaderManager.LoaderCallbacks;
import android.content.AsyncTaskLoader;
import android.content.Context;
import android.content.Loader;
import android.graphics.Bitmap;
import android.view.Menu;
import android.view.View;
import android.widget.ImageView;
 
@SuppressLint("NewApi")
public class MainActivity extends Activity implements LoaderCallbacks<Bitmap>{
    static int i=0;//控制图片url路径
    ImageView iv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
        //初始化控件
iv=(ImageView) findViewById(R.id.iv);
}
 
public void download(View view){
LoaderManager loader=getLoaderManager();
loader.restartLoader(0,null,this);
}
 
@Override
public Loader<Bitmap> onCreateLoader(int id, Bundle args) {
MyLoader loader=new MyLoader(this);//创建loader对象
 
return loader;
}
 
@Override
public void onLoadFinished(Loader<Bitmap> arg0, Bitmap arg1) {
        iv.setImageBitmap(arg1);//设置图片在ImageView中显示
}
 
@Override
public void onLoaderReset(Loader<Bitmap> arg0) {
// TODO Auto-generated method stub
 
}
    private static class MyLoader extends AsyncTaskLoader<Bitmap>{
    
public MyLoader(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
 
@Override
public Bitmap loadInBackground() {
    //只能加载4张图片 1-4.jpg
Bitmap bm=HttpUtils.getBitmap("http://www.ytmfdw.com/image/img"+(++i%4+1)+".jpg");
return bm;
}
@Override
protected void onStartLoading() {
// TODO Auto-generated method stub
super.onStartLoading();
    forceLoad();
}
    
    }
}
 

实现LoaderCallbacks接口动态循环加载网上图片并展示在手机屏幕上 ...的更多相关文章

  1. vue 循环加载动态组件以及传值

    今天遇到一个需求,某个页面是个动态页面,由多个子组件构成. 之前我们的做法是将N个需要的组件import进主页面,然后引用一下即可.但是现在遇到的问题是, 这个动态页面存在多个业务,有的业务需要某几个 ...

  2. Spring Cloud Nacos实现动态配置加载的源码分析

    理解了上述Environment的基本原理后,如何从远程服务器上加载配置到Spring的Environment中. NacosPropertySourceLocator 顺着前面的分析思路,我们很自然 ...

  3. Java_动态重新加载Class总结

    在此记载Java动态重新加载Class的点点滴滴,实现之前也在网上看了很多文章,但发现不是很清晰,后来发现总结,看源码实现还是最靠谱. 直接上代码: package com.lkb.autoCode. ...

  4. Java_动态重新加载Class机制

    Java动态重新加载Class 项目中使用到了动态重新加载Class的机制,作用是让一些代码上线之前可以在线上环境测试一下,当然,这是非常不好的测试机制,我刚来的时候也为这种机制感到惊讶—怎么可以在线 ...

  5. 使用javassist运行时动态重新加载java类及其他替换选择

    在不少的情况下,我们需要对生产中的系统进行问题排查,但是又不能重启应用,java应用不同于数据库的存储过程,至少到目前为止,还不能原生的支持随时进行编译替换,从这种角度来说,数据库比java的动态性要 ...

  6. esri-leaflet入门教程(5)- 动态要素加载

    esri-leaflet入门教程(5)- 动态要素加载 by 李远祥 在上一章节中已经说明了esr-leaflet是如何加载ArcGIS Server提供的各种服务,这些都是服务本身来决定的,API脚 ...

  7. Vue 动态图片加载路径问题和解决方法

    最近在做一个树形结构的组件,使用了Vue和element UI中el-tree组件.因为树中每个节点都需要显示一个图标图片,并且需要根据后台传入的数据类型动态地显示,所以图片的路径需要动态地加载.下面 ...

  8. Android系统下的动态Dex加载

    1 问题在Android系统中,一个App的所有代码都在一个Dex文件里面.Dex是一个类似Jar的存储了多有Java编译字节码的归档文件.因为Android系统使用Dalvik虚拟机,所以需要把使用 ...

  9. Android系统下的动态Dex加载与app速度优化

    1 问题 在Android系统中,一个App的所有代码都在一个Dex文件里面.Dex是一个类似Jar的存储了多有Java编译字节码的归档文件.因为Android系统使用Dalvik虚拟机,所以需要把 ...

随机推荐

  1. 【LA3942-Remember the word 】Trie

    http://acm.hust.edu.cn/vjudge/problem/22109 题意:给定n个单词,一个字符串,问把这个字符串划分为若干个单词的连接(单词可重复使用)有多少种方案(mod200 ...

  2. http://linuxme.blog.51cto.com/1850814/372960

    http://linuxme.blog.51cto.com/1850814/372960 http://os.51cto.com/art/201404/435129.htm

  3. linux c first

    创建文件夹mkdir 文件夹名称删除文件夹rm -rf 文件夹名称创建文件touch test.c删除文件rm -f test.c编译gcc -o test test.c在执行只语句后会生成一个*te ...

  4. 如何向AcmeAir注入问题代码

    为什么要注入问题代码? AcmeAir的常规代码是为了压测测试准备的,所以绝大部分的操作都是可以在几十毫秒中就可以正常返回的.为了向用户展示我们APM工具可以在源代码级别发现系统潜在问题,我们需要在A ...

  5. iOS开发-UISlider改变图片透明度

    拖动条是通过滑块的位置来标识数值,而且拖动条允许用户拖动滑块来改变值.因此,拖动条通常用于对系统的某种数值进行调节,如调节亮度,透明度,音量等. 一.属性介绍 @property(nonatomic) ...

  6. Python字符串的encode与decode研究心得 乱码问题解决方法

    以下摘自:http://www.jb51.net/article/17560.htm 为什么Python使用过程中会出现各式各样的乱码问题,明明是中文字符却显示成“\xe4\xb8\xad\xe6\x ...

  7. MSChart 控件

    微软发布了.NET 3.5框架下的图表控件,功能很强劲,基本上能想到的图表都可以使用它绘制出来,给图形统计和报表图形显示提供了很好的解决办法,同时支持Web和WinForm两种方式,不过缺点也比较明显 ...

  8. MyBatis学习总结_07_Mybatis缓存

    一.MyBatis缓存介绍 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Se ...

  9. jstl long类型数据转换为日期格式

    一.有WEB-INF下建立一个datetag.tld <?xml version="1.0" encoding="UTF-8"?> <tagl ...

  10. 乙醇脱氢酶力场文件的处理(含ZN,NAD,乙醇)

    很多蛋白质在行驶生物催化反应(如ATP水解,氨基酸的乙酰化,CoA的去乙酰化,甲基化等等)都需要金属离子(Mg,Zn,Ca等等)的参与,换句话说,金属离子对蛋白功能是必须的.模拟金属酶体系,现在也是分 ...