文档章节

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

茗香墨语
 茗香墨语
发布于 2015/11/19 11:29
字数 627
阅读 4066
收藏 4
点赞 1
评论 11

关于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
博文 35
码字总数 27952
作品 0
广州
程序员
加载中

评论(11)

茗香墨语
茗香墨语

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

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

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

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

引用来自“Ryane”的评论

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

引用来自“Ryane”的评论

报错了怎么办

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

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

引用来自“120850710”的评论

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

引用来自“Ryane”的评论

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

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

报错了怎么办

报什么错呢?
android 读取WebView缓存及清理WebView缓存

1.缓存的分类: 首先要说的一点是缓存的分类,我们缓存的数据分为:页面缓存和数据缓存 页面缓存:加载一个网页时的html、JS、CSS等页面或者资源数据,这些缓存资源是由于浏览器 的行为而产生...

keller.zhou ⋅ 2016/11/15 ⋅ 0

老生常谈Android的MVP架构

原生框架问题 由于原生 Android 开发应该已经是一个基础的 MVC 框架,所以在初始开发的时候并没有遇到太多框架上的问题,可是一旦项目规模到了一定的程度,就需要对整个项目的代码结构做一个...

LaxusJ ⋅ 04/23 ⋅ 0

Android应用程序窗口(Activity)的窗口对象(Window)的创建过程分析

每一个Activity组件都有一个关联的ContextImpl对象,同时,它还关联有一个Window对象,用来描述一个具体的应用程序窗口。与Activity组件所关联的窗口对象的实际类型为PhoneWindow。 那么创建...

lonamessi ⋅ 05/31 ⋅ 0

Unity 安卓截图保存到本地,获取本地图片并显示

关于这个截图并获取的功能,并不是很难,而且网上到处都是解决方法,主要是因为自己在这里踩到了坑,所以还是记一下,也希望能帮到和我一样碰到这个坑的人;总之还是先上代码: using System...

qq_35539447 ⋅ 03/13 ⋅ 0

Google让Chromebook用户在Chrome OS中管理所有Android文件

Google Chromium开发者FrançoisBeaufort透露,Chrome操作系统团队正计划在Files应用中让Chromebook设备管理所有的Android文件。被称为“Android文件”的新功能已在Chrome OS Dev频道中实施,...

稿源:cnBeta.COM ⋅ 06/04 ⋅ 0

浅入浅出 Android 安全:第二章 Android Linux 内核层安全

第二章 Android Linux 内核层安全 来源:Yury Zhauniarovich | Publications 译者:飞龙 协议:CC BY-NC-SA 4.0 作为最广为人知的开源项目之一,Linux 已经被证明是一个安全,可信和稳定的软...

apachecn_飞龙 ⋅ 2016/11/30 ⋅ 0

高德地图自定义mark

Android中高德地图显示多个自定义mark加载网络图片如何解决,

millie米莉 ⋅ 02/03 ⋅ 0

Google推荐——Glide使用详解

零、前言 本文所使用的Glide版本为3.7.0 「推荐」设计模式系列 设计模式(零)- 面向对象的六大原则 设计模式(一)- 单例模式 设计模式(二)- Builder模式 设计模式(三)- 原型模式 设计模...

丁佳辉 ⋅ 06/12 ⋅ 0

从Android到React Native开发(四、打包流程解析和发布为Maven库)

1、从Android到React Native开发(一、入门) 2、从Android到React Native开发(二、通信与模块实现) 3、从Android到React Native开发(三、自定义原生控件支持)  作为失踪人口,本篇是对...

恋猫月亮 ⋅ 06/13 ⋅ 0

Android Flutter 内存机制初探

阿里妹导读:闲鱼技术团队一直在探索如何使用Flutter来统一移动App开发。移动设备上的资源有限,内存使用成了日常开发中的常见问题。那么,Flutter是如何使用内存,又会对Native App的内存带...

b0q8cpra539hafs7 ⋅ 05/23 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

ARMS: 原来实时计算可以这么简单!

摘要: 业务实时监控服务( ARMS)是一款阿里云应用性能管理(APM)类监控产品。借助本产品,您可以基于前端、应用、业务自定义等服务,迅速便捷地为企业构建秒级响应的业务监控能力。 业务实...

阿里云云栖社区 ⋅ 2分钟前 ⋅ 0

Monkey入门_琉璃

先下载android sdk安装配置好路径,然后adb shell 如果给你显示这个,说明目前没有有效的移动设备链接,可以开个安卓模拟器或者使用真机,usb或wifi链接到电脑都可以,打开usb调试模式;然后...

EvanDev ⋅ 3分钟前 ⋅ 0

Idea类注释模板

一、设置类注释模板 1.选择File–>Settings–>Editor–>File and Code Templates–>Includes–>File Header. 2.设置完成后,创建类时自动生成注释,效果如下。...

Clarence_D ⋅ 5分钟前 ⋅ 0

vuejs题

1、active-class是哪个组件的属性?嵌套路由怎么定义? 答:vue-router模块的router-link组件。 2、怎么定义vue-router的动态路由?怎么获取传过来的动态参数? 答:在router目录下的index.j...

自由小鸟 ⋅ 5分钟前 ⋅ 0

2018年社交系统ThinkSNS年中大促

致各大商企事业单位及粉丝用户: 为感谢大家对ThinkSNS品牌的关注与支持,2018年6月18日官方诚推出:年中大促,限时抢购活动! “ThinkSNS 年中大促,¥6.18超值特惠 名额有限,预购从速! ...

ThinkSNS账号 ⋅ 10分钟前 ⋅ 0

MYSQL主从复制搭建及切换操作(GTID与传统)

如下: MYSQL主从复制方式有默认的复制方式异步复制,5.5版本之后半同步复制,5.6版本之后新增GTID复制,包括5.7版本的多源复制。 MYSQL版本:5.7.20 操作系统版本:linux 6.7 64bit 1、异步...

rootliu ⋅ 11分钟前 ⋅ 0

Java强软弱虚引用Reference

Java强软弱虚引用Reference 本文目的:深入理解Reference 本文定位:学习笔记 学习过程记录,加深理解,提升文字组合表达能力。也希望能给学习Reference的同学一些灵感 源码说明 源码基于jdk...

lichuangnk ⋅ 13分钟前 ⋅ 0

plsql 表中字段及注释时为乱码

在windows中创 建一个名为“NLS_LANG”的系统环境变量,设置其值为“SIMPLIFIED CHINESE_CHINA.ZHS16GBK”, 然后重新启动 pl/sql developer,这样检索出来的中文内容就不会是乱码了。如...

江戸川 ⋅ 16分钟前 ⋅ 0

Docker创建JIRA 7.2.7中文破解版

1、介绍 1.1、什么是JIRA?   关于JIRA网上的介绍有很多,以下摘自百度百科:   JIRA是Atlassian公司出品的项目与事务跟踪工具,被广泛应用于缺陷跟踪、客户服务、需求收集、流程审批、任...

谢思华 ⋅ 20分钟前 ⋅ 0

Java Class 类使用

Java Class 类使用 我们可以通过已知的包名来获取到 Class 对象,从而可以通过反射动态的来操作对象。 获取Class有三种方式 //通过对象.class直接获取Class integerClass = Integer.class;...

gaob2001 ⋅ 25分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部