文档章节

用Android的imageVew显示网络和本地的图片

茗香墨语
 茗香墨语
发布于 2015/11/19 11:29
字数 627
阅读 4218
收藏 4

关于imageview的说明就不谈了,可以去看看官方API介绍,里面很详细,这里我直接上实例代码了

 首先你要准备一张图片放到如下:

MainActivity.java的代码如下:

package com.yaowen.imageviewtest;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Environment;
import android.os.StrictMode;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class MainActivity extends AppCompatActivity {
    private ImageView imageView;//显示图片的组件
    private Button netDownload, localDownload;//网络加载和本地加载按钮
    //服务器上得图片地址
    private String url = "http://e.hiphotos.baidu.com/image/pic/item/730e0cf3d7ca7bcb6e7f28c3ba096b63f724a8d2.jpg";
    //本地sd卡上的图片路径
    private String localPath = Environment.getExternalStorageDirectory() + "/Pictures/bg2.jpg";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       
        //初始化组件
        imageView = (ImageView) findViewById(R.id.imageTest);
        netDownload = (Button) findViewById(R.id.netDownload);
        localDownload = (Button) findViewById(R.id.localDownload);
        //调试语句,可以忽略
        Log.d("TAG", "localPath>>>>>" + localPath);
        //网络加载按钮监听事件
        netDownload.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Bitmap bitmap = null;//新建一个bitmap对象并设置其为空值
                bitmap = getHttpBitmap(url);//通过getHttpBitmap方法获得bitmap实例
                imageView.setImageBitmap(bitmap);//设置imageView的显示
            }
        });
        //本地加载按钮监听事件
        localDownload.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    FileInputStream fis = new FileInputStream(localPath);
                    //Bitmap bitmap = getLocalBitmap(localPath);
                    Bitmap bitmap = BitmapFactory.decodeStream(fis);
                    imageView.setImageBitmap(bitmap);
                    fis.close();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
    }
   /* private Bitmap getLocalBitmap(String localPath) {
        try {
            fis = new FileInputStream(localPath);
            return BitmapFactory.decodeStream(fis);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return null;
        }
    }*/
    /**
     * 从服务器获取图片资源
     *
     * @param url 服务器上图片的链接地址
     */
    private Bitmap getHttpBitmap(String url) {
        URL myUrl = null;
        Bitmap bitmap = null;
        Log.d("TAG", url);
        try {
            myUrl = new URL(url);
            //新建一个HttpURLConnection连接
            HttpURLConnection conn = (HttpURLConnection) myUrl.openConnection();
            conn.setConnectTimeout(2000);//设置HttpURLConnection连接超时,时间为2S
            conn.setDoInput(true);
            conn.connect();
            InputStream is = conn.getInputStream();
            bitmap = BitmapFactory.decodeStream(is);
            is.close();
            //conn.disconnect();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return bitmap;
    }
}
<!--主布局文件代码-->
<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button
            android:id="@+id/netDownload"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="网上加载" />
        <Button
            android:id="@+id/localDownload"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="本地加载" />
    </LinearLayout>
    <ImageView
        android:id="@+id/imageTest"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>
<!--记得在manifest里加入这两个权限-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />

最后附上图片:(以上图片只是示例啊,不要纠结啊,都是在网络上找的图片,可以随意改变得啦;)

 


温习提示:如果上面代码运行出错,而且有说到StrictMode的话,请看我的这边篇文章吧

http://my.oschina.net/yaowen424/blog/528542

© 著作权归作者所有

共有 人打赏支持
茗香墨语
粉丝 10
博文 41
码字总数 27952
作品 0
广州
程序员
加载中

评论(11)

茗香墨语
茗香墨语

引用来自“傲雪工作室”的评论

招募 android自由开发者 qq2996475653 ,我们是一群有志向的团队
茗香墨语
茗香墨语

引用来自“小绵羊11”的评论

开一个子线程 或者handler 就更好了
是的,用handler更新UI线程,子线网络加载并发送message给handler即可
科技工作室
科技工作室
招募 android自由开发者 qq2996475653 ,我们是一群有志向的团队
小绵羊11
开一个子线程 或者handler 就更好了
茗香墨语
茗香墨语

引用来自“Ryane”的评论

报错了怎么办
严苛模式
茗香墨语
茗香墨语

引用来自“Ryane”的评论

报错了怎么办

引用来自“依风听雨风之魂”的评论

主线程中加载,能不报错吗
启用严苛模式啊,文章结尾不是说了如果运行不了请看下面链接的文章~~
茗香墨语
茗香墨语

引用来自“120850710”的评论

为什么要在主线程里加载网络图片呢
人懒啊 ,没办法,启用严苛模式就行了。也可以自己改造一下代码不用再主线程里加载咯
120850710
120850710
为什么要在主线程里加载网络图片呢
依风听雨风之魂
依风听雨风之魂

引用来自“Ryane”的评论

报错了怎么办
主线程中加载,能不报错吗
茗香墨语
茗香墨语

引用来自“李建昌”的评论

报错了怎么办

报什么错呢?
returnBitMap加载网络图片

在android当中显示一张网络图片的时候, 1.把这个网络图片转换成java的imputstream流, 2.把这个留转换成一个bitMap. 3.bitMap传给imageView returnBitMap函数是最核心的,可以重用,负责把一...

Serysew
2013/02/17
0
2
android应用开发 网络编程与常见功能优化总结

一般的应用都是从服务器获取数据,然后通过极致的界面风格,将数据清晰,明朗的展现给用户。、 那么就可以分为这两块: 1.界面UI 追求极致 2.功能 2.1获取数据:主要是与服务器通信,那么就要...

补全
2013/04/07
0
1
Android TextView使用HTML处理字体样式、显示图片等

学Android的时候突然想到一个问题:怎么用TextView控件显示带有格式的文字,可否使用Html布局?查了下Android 帮助文档,其提供了android.text.Html类和Html.ImageGetter、Html.TagHandler接...

fyxjsj
2013/09/21
0
1
六款值得推荐的android(安卓)开源框架简介【转】

1、volley 项目地址 https://github.com/smanikandan14/Volley-demo (1) JSON,图像等的异步下载; (2) 网络请求的排序(scheduling) (3) 网络请求的优先级处理 (4) 缓存 (5) 多级别取消请求...

hkstar35
2014/07/11
0
0
六款值得推荐的android(安卓)开源框架简介【转】

1、volley 项目地址 https://github.com/smanikandan14/Volley-demo (1) JSON,图像等的异步下载; (2) 网络请求的排序(scheduling) (3) 网络请求的优先级处理 (4) 缓存 (5) 多级别取消请求...

火蚁
2014/07/09
0
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

ES6 Promise

Promise promise是异步编程的一种解决方案 1 什么是异步? 异步模式,每一个任务有一个或多个回调函数(callback),前一个任务结束后,不是执行后一个任务,而是执行回调函数,后一个任务则...

NDweb
21分钟前
0
0
Python百分登顶年度编程语言排行榜

今天 IEEE Spectrum 发布了 2018 年度顶级编程语言排行榜。该榜单可根据流行趋势、职业方向、语言类型等多个标准各自细分生成榜单,也可以综合多个标准进行排列,使用者可以根据自己的需求过...

六库科技
25分钟前
0
0
consul笔记

安装和启动就不说了,很简单。 注册一个服务: http://localhost:8500/v1/agent/service/register put请求,json格式内容如下 { "ID": "userServiceId", //服务id "Name": "userService", //服...

朝如青丝暮成雪
25分钟前
0
0
iOS CollectionView 的那些事

UICollectionView是开发中用的比较多的一个控件,本文记录UICollectionView在开发中常用的方法总结,包括使用UICollectionViewFlowLayout实现Grid布局、添加Header/Footer、自定义layout布局...

aron1992
26分钟前
0
0
linux tar.gz zip 解压缩 压缩命令

http://apps.hi.baidu.com/share/detail/37384818 download ADT link http://dl.google.com/android/ADT-0.9.6.zip download SDK link http://dl.google.com/Android/android-sdk_r11-linux_......

owensliu
28分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部