实现LoaderCallbacks接口动态循环加载网上图片并展示在手机屏幕上 ...

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();

}

}

}

时间: 2024-10-12 10:43:44

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

AutoSharedLibrary -- 基于模板元编程技术的跨平台C++动态链接加载库

基于模板元编程技术的跨平台C++动态链接加载库.通过模板技术,使用者仅需通过简单的宏,即可使编译器在编译期自动生成加载动态链接库导出符号的代码,无任何额外的运行时开销. ASL_LIBRARY_BEGIN(TestLib) ASL_SYMBOL(Proc_test1, test1, false) ASL_SYMBOL(Proc_test2, test2, true) ASL_LIBRARY_END() TestLib theLib; try { theLib.Load("./1.so"

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

esri-leaflet入门教程(5)- 动态绘制图形 by 李远祥 在上一章节中已经说明了esr-leaflet是如何加载ArcGIS Server提供的各种服务,这些都是服务本身来决定的,API脚本只是非常简单的调用.但如果要做一列的地图交互操作或者动态渲染等,那就必须使用地图区域跳转.查询结果渲染.动态添加图形等多种交互手段.而这些交互手段基本上离不开一些非服务类型的数据加载,我们可以将其成为动态要素.动态要素一般是在页面端进行动态绘制的. 动态要素这一说法并不是ArcGIS 或者leaf

Java_动态重新加载Class机制

Java动态重新加载Class 项目中使用到了动态重新加载Class的机制,作用是让一些代码上线之前可以在线上环境测试一下,当然,这是非常不好的测试机制,我刚来的时候也为这种机制感到惊讶—怎么可以在线上环境运行测试代码!后来经过了解,这么做的原因有以下两个: 有些代码没有办法在本地进行测试,本地没有线上的环境 我们弱到连测试机都没有(这是重点) 既然我们连测试机都没有,那么我就觉得我们的项目其实也没有想象中的重要,这么测就这么测吧~~     之前对ClassLoader没啥概念,google到

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

最近在做一个树形结构的组件,使用了Vue和element UI中el-tree组件.因为树中每个节点都需要显示一个图标图片,并且需要根据后台传入的数据类型动态地显示,所以图片的路径需要动态地加载.下面是核心组件代码: <el-tree :data="data" class="tree-view" node-key="id" :props="defaultProps" @node-click="click&quo

JS获取图片的缩略图,并且动态的加载多张图片

找了好多资料也没有找到该死的ie的解决办法,最后放弃了ie <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>js获取缩略图</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <st

nginx php动态编译加载模块.

#Nginx动态编译加载模块步骤 #查看目前Nginx版本及编译模块 #[[email protected] ~]# /opt/app/lnmp/nginx-1.12.0/sbin/nginx -V #nginx version: nginx/1.12.0 #built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) #built with OpenSSL 1.0.2k  26 Jan 2017 #TLS SNI support enabled #c

WPF循环加载图片导致内存溢出的解决办法

程序场景:一系列的图片,从第一张到最后一张依次加载图片,形成"动画". 生成BitmapImage的方法有多种: 1. var source=new BitmapImage(new Uri("图片路径",UriKind.xxx)); 一般的场景使用这种方法还是比较方便快捷,但是对于本场景,内存恐怕得爆. 2. var data =File.ReadAllBytes("图片路径"); var ms = new System.IO.MemoryStr

Bootstrap tab页的动态ajax加载

要实现这样的功能,点击tab导航ajax动态加载页面,当加载过之后,点击则不再重新加载,直接显示原来加载的页面. tab页面代码: <!-- Nav tabs --><ul class="nav nav-tabs" role="tablist" id="maintab">  <li class="active"><a href="#tab1"  onclick='s

Silverlight项目笔记7:xml/json数据解析、MVVM下实现多级树形结构TreeView、忽视引用类型导致数据绑定错误、通过流或动态空间加载图片、虚拟目录设置、silverlight安全机制引发的问题、WebClient缓存问题

涉及的内容主要有: 1.xml/json数据解析 2.多级树形结构TreeView 3.忽视引用类型导致数据绑定错误 4.通过流或动态空间加载图片 5.虚拟目录设置 6.silverlight安全机制引发的问题 7.webclient缓存问题 1.xml/json数据解析 (1)xml数据解析 使用WebClient获取数据,获取到的数据实例化为一个XDocument,使用XDocument的Descendants(XName)方法获得对应节点的数据集合,再通过Element这个方法对数据集合进