【Android开发】范例1-开启新线程获取网络图片并显示到ImageView中

利用之前学过的多线程处理技术,我们来写一个开启新线程获取网络图片并显示到ImageView中的实例。

在布局文件中加入一个ImageView图片控件:
res/layout/main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/linearLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
	<ImageView android:id="@+id/imageView1"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    android:padding="10dp"
	    android:src="@drawable/hint"/>
</LinearLayout>

用户等待的时候加载一个图片动画,配置文件为:
res/anim/anim_alpha.xml:

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha android:fromAlpha="1"
        android:toAlpha="0"
        android:fillAfter="true"
        android:repeatMode="reverse"
        android:repeatCount="1"
        android:duration="2000"/>
</set>

在Activity中获取网络图片,并异步显示在ImageView控件上(写了一个基于Java的Jsp技术的Web程序,提供图片链接,服务器为tomcat。换成其他固定url路径的图片网址也可以)
MainActivity:

package com.example.test;  

import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;

public class MainActivity extends Activity{
	 private ImageView imageView;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        imageView=(ImageView)findViewById(R.id.imageView1);
        final Animation alpha=AnimationUtils.loadAnimation(this, R.anim.anim_alpha);//获取透明度变化动画资源
        //用户等待时设置默认图片的动画
        alpha.setRepeatCount(Animation.INFINITE);//循环显示
        imageView.startAnimation(alpha);

        //创建一个新线程,用于从网络上获取图片
        new Thread(new Runnable() {

			@Override
			public void run() {
				//从网络上获取图片
				final Bitmap bitmap=getPicture("http://192.168.1.101:8080/hpu-acm/tupian/rongyu/51505s.jpg");

				try {
					Thread.sleep(2000);//线程休眠两秒钟
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				alpha.setRepeatCount(0);//循环显示
				//发送一个Runnable对象
				imageView.post(new Runnable(){

					@Override
					public void run() {
						imageView.setImageBitmap(bitmap);//在ImageView中显示从网络上获取到的图片
					}

				});

			}
		}).start();//开启线程

    }
    /*
     * 功能:根据网址获取图片对应的Bitmap对象
     * @param path
     * @return Bitmap
     * */
    public Bitmap getPicture(String path){
    	Bitmap bm=null;
    	URL url;
		try {
			url = new URL(path);//创建URL对象
			URLConnection conn=url.openConnection();//获取URL对象对应的连接
	    	conn.connect();//打开连接
	    	InputStream is=conn.getInputStream();//获取输入流对象
	    	bm=BitmapFactory.decodeStream(is);//根据输入流对象创建Bitmap对象
		} catch (MalformedURLException e1) {
			e1.printStackTrace();//输出异常信息
		}catch (IOException e) {
			e.printStackTrace();//输出异常信息
		}

		return bm;
    }
}

别忘记在AndroidManifest.xml中加入访问网络的权限:
<uses-permission android:name="android.permission.INTERNET"/>

运行效果如图

转载请注明出处:http://blog.csdn.net/acmman/article/details/46359031

时间: 2024-09-17 04:22:36

【Android开发】范例1-开启新线程获取网络图片并显示到ImageView中的相关文章

【Android开发】范例2-开启新线程实现电子广告牌

利用之前学过的多线程处理技术,我们做一个开启新线程实现电子广告牌的项目 界面布局文件,加入ImageView图片控件,用于显示一个图片,一个TextView控件,用于显示广告说明语. res/layout/main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/andro

Android——使用Volley+fastJson在新线程中读取网络接口获取天气信息

一,关于Volley            其实最初对于网络数据的访问,我是没想到要用框架的,使用HttpURLConnection或者HttpGet or HttpPost都可以实现.但是why? why I have to use Volley?        Before Volley:                class HttpURLConnection_post extends Thread{ @Override public void run() { //设置请求的路径 St

ndroid获得开机通知-Android开发时获得开启的通知

问题描述 Android开发时获得开启的通知 敲代码遇到一个问题,许久未解决,求解:怎么实现收到开机的广播,程序大致的需求是在开机后谈一个对话框,关键是开机这个广播收不到 [查资料说:在应用进程没有启动的情况下是不能接收到的.]若能帮助,感激不尽! 解决方案 <receiver android:name="*.*BootRecerver" android:enabled="true" > <intent-filter android:priorit

Android使用线程获取网络图片的方法_Android

本文为大家分享了Android使用线程获取网络图片的具体代码,供大家参考,具体内容如下 AndroidManifest.xml    <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.zdcrobot.handlermessage

Android使用线程获取网络图片的方法

本文为大家分享了Android使用线程获取网络图片的具体代码,供大家参考,具体内容如下 AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.zdcrobot.handlermessage&qu

Android开发仿QQ空间根据位置弹出PopupWindow显示更多操作效果_Android

我们打开QQ空间的时候有个箭头按钮点击之后弹出PopupWindow会根据位置的变化显示在箭头的上方还是下方,比普通的PopupWindow弹在屏幕中间显示好看的多. 先看QQ空间效果图: 这个要实现这个效果可以分几步进行 1.第一步自定义PopupWindow,实现如图的样式,这个继承PopupWindow自定义布局很容易实现 2.得到点击按钮的位置,根据位置是否在屏幕的中间的上方还是下方,将PopupWindow显示在控件的上方或者下方 3.适配问题,因为PopupWindow上面的操作列表

Android开发仿QQ空间根据位置弹出PopupWindow显示更多操作效果

我们打开QQ空间的时候有个箭头按钮点击之后弹出PopupWindow会根据位置的变化显示在箭头的上方还是下方,比普通的PopupWindow弹在屏幕中间显示好看的多. 先看QQ空间效果图: 这个要实现这个效果可以分几步进行 1.第一步自定义PopupWindow,实现如图的样式,这个继承PopupWindow自定义布局很容易实现 2.得到点击按钮的位置,根据位置是否在屏幕的中间的上方还是下方,将PopupWindow显示在控件的上方或者下方 3.适配问题,因为PopupWindow上面的操作列表

安卓,子线程获取网络图片,发消息给主线程,主线程用图片填充listview,出错

问题描述 安卓,子线程获取网络图片,发消息给主线程,主线程用图片填充listview,出错 先上logcat: 我的xml布局就是一个按钮,和一个listview,listview里就一个imageview,按下按钮开始从网络获取图片,然后发消息到主线程,然后listview就填充数据.xml代码就不贴了. 以下是mainactivity public class MainActivity extends AppCompatActivity implements View.OnClickList

如何从sqlite数据库中获取数据并显示在listview中?

问题描述 如何从sqlite数据库中获取数据并显示在listview中? 在登录页面后,我想在listview中把Apple显示成A,Boy显示成B等等,直到F.但是在程序中当我完全登录后,只有登录表成功创建,主菜单还是没有创建. 我想在test database中创建主菜单,然后我想从主菜单表(mainmenu table)中获取数据再显示在listview中. 我使用了下面的代码: if(username.length()>0&&password.length()>0) {