文档章节

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

茗香墨语
 茗香墨语
发布于 2015/11/19 11:29
字数 627
阅读 4522
收藏 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当中显示网络图片

在android当中显示一张网络图片的时候,其实是比较麻烦的。首先得把这个网络图片转换成java的imputstream流,然后再把这个留转换成一个bitMap. bitMap是可以作为参数传给imageView的。 在下边...

长平狐
2012/08/21
89
0
如何在Android当中显示网络图片

在android当中显示一张网络图片的时候,其实是比较麻烦的。首先得把这个网络图片转换成java的imputstream流,然后再把这个留转换成一个bitMap. bitMap是可以作为参数传给imageView的。 在下边...

长平狐
2012/08/09
97
0
如何在Android当中显示网络图片

在android当中显示一张网络图片的时候,其实是比较麻烦的。首先得把这个网络图片转换成java的imputstream流,然后再把这个留转换成一个bitMap. bitMap是可以作为参数传给imageView的。 在下边...

长平狐
2012/08/14
143
1
android应用开发 网络编程与常见功能优化总结

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

补全
2013/04/07
0
1

没有更多内容

加载失败,请刷新页面

加载更多

Linux Wireshark普通用户启动使用方案

当系统安装好Wireshark后请正常启动是否可以进行正常使用,如果不行请参考下列指导 向系统添加一个用户组 sudo groupadd wireshark //如提示此组存在可跳过 将指定用户添加到这个组中 sudo...

CHONGCHEN
今天
1
0
CSS 选择器参考手册

CSS 选择器参考手册 选择器 描述 [attribute] 用于选取带有指定属性的元素。 [attribute=value] 用于选取带有指定属性和值的元素。 [attribute~=value] 用于选取属性值中包含指定词汇的元素。...

Jack088
今天
2
0
数据库篇一

数据库篇 第1章 数据库介绍 1.1 数据库概述  什么是数据库(DB:DataBase) 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据...

stars永恒
今天
4
0
Intellij IDEA中设置了jsp页面,但是在访问页面时却提示404

在Intellij IDEA中设置了spring boot的jsp页面,但是在访问时,却出现404,Not Found,经过查找资料后解决,步骤如下: 在Run/Debug Configurations面板中设置该程序的Working Directory选项...

uknow8692
昨天
4
0
day24:文档第五行增内容|每月1号压缩/etc/目录|过滤文本重复次数多的10个单词|人员分组|

1、在文本文档1.txt里第五行下面增加如下内容;两个方法; # This is a test file.# Test insert line into this file. 分析:给文档后增加内容,可以用sed 来搞定;也可以用while do done...

芬野de博客
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部