还是两种方式都写出来,也看看有多smart

1.传统方式从网络上获取图片并显示

首先新建Android Project顺便也在Manifest把网络权限加了

activity_main.xml布局如下

<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" ><EditTextandroid:id="@+id/editText1"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="http://image1.mop.com/images/project13/2010-07-09/12786407144078965.jpg" ><requestFocusandroid:layout_width="wrap_content"android:layout_height="match_parent" /></EditText><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal" ><Buttonandroid:id="@+id/bt1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:onClick="click"android:text="浏览" /><Buttonandroid:id="@+id/bt2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:onClick="click"android:text="浏览(Smart)" /></LinearLayout><ImageViewandroid:id="@+id/iv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/ic_launcher"android:visibility="gone" /><!-- 这里设置visibility为gone,默认不可见 --></LinearLayout>

因为不能在主线程访问网络,所以要从网络上下载图片需要写一个子线程,图片下载完成要通知主线程更新UI又要用到Handler

package com.example.imgviewer;import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;public class MainActivity extends Activity {private EditText et1;private ImageView iv;private Handler mhandler;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);et1 = (EditText) findViewById(R.id.editText1);iv = (ImageView) findViewById(R.id.iv);mhandler = new Handler(){/*** 这里收到消息然后转成Bitmap对象就可以设置到imageView上* 最后设置imageView可见*/@Overridepublic void handleMessage(Message msg) {if (msg.what == 0) {Bitmap bm = (Bitmap) msg.obj;iv.setImageBitmap(bm);// 设置可见才能显示出图片iv.setVisibility(View.VISIBLE);} else {Toast.makeText(iv.getContext(), "下载失败!", Toast.LENGTH_SHORT).show();}}};}public void click(View view){new Thread(new Runnable() {@Overridepublic void run() {try {URL url = new URL(et1.getText().toString());HttpURLConnection connection = (HttpURLConnection)url.openConnection();connection.setRequestMethod("GET");connection.setDoInput(true);connection.connect();InputStream is = connection.getInputStream();// 前面都是标准的写法获取输入流// 输入流解码成bitmap对象,然后通过handler发送出去Bitmap bm = BitmapFactory.decodeStream(is);Message msg = mhandler.obtainMessage(0, bm);mhandler.sendMessage(msg);} catch (Exception e) {e.printStackTrace();mhandler.sendMessage(mhandler.obtainMessage(-1));}}}).start();}}

代码主要集中在Handler和Thread那里

下面是点击浏览的效果图

好,第一种方式就写完了

2.用Smart Image View实现

Smart Image View是一个开源项目,首先我们要去Smart Image View下载最新的代码

下载完成后解压,把src目录复制到现在的工程里面

然后项目结构就是这样了

然后在界面布局下面在添加一个SmartImageView,默认也设置为隐藏

<com.loopj.android.image.SmartImageViewandroid:id="@+id/si"android:layout_width="wrap_content"android:layout_height="wrap_content"android:visibility="gone" />

最后的代码是这样的

package com.example.imgviewer;import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;import com.loopj.android.image.SmartImageView;import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;public class MainActivity extends Activity {private EditText et1;private ImageView iv;private Handler mhandler;private SmartImageView siv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);et1 = (EditText) findViewById(R.id.editText1);iv = (ImageView) findViewById(R.id.iv);siv = (SmartImageView) findViewById(R.id.si);mhandler = new Handler(){/*** 这里收到消息然后转成Bitmap对象就可以设置到imageView上*/@Overridepublic void handleMessage(Message msg) {if (msg.what == 0) {Bitmap bm = (Bitmap) msg.obj;iv.setImageBitmap(bm);} else {Toast.makeText(iv.getContext(), "下载失败!", Toast.LENGTH_SHORT).show();}}};}public void click(View view){switch (view.getId()) {case R.id.bt1:// 设置可见才能显示出图片siv.setVisibility(View.GONE);iv.setVisibility(View.VISIBLE);iv.setImageResource(R.drawable.ic_launcher);new Thread(new Runnable() {@Overridepublic void run() {try {URL url = new URL(et1.getText().toString());HttpURLConnection connection = (HttpURLConnection)url.openConnection();connection.setRequestMethod("GET");connection.setDoInput(true);connection.connect();InputStream is = connection.getInputStream();// 前面都是标准的写法获取输入流// 输入流解码成bitmap对象,然后通过handler发送出去Bitmap bm = BitmapFactory.decodeStream(is);Message msg = mhandler.obtainMessage(0, bm);mhandler.sendMessage(msg);} catch (Exception e) {e.printStackTrace();mhandler.sendMessage(mhandler.obtainMessage(-1));}}}).start();break;case R.id.bt2:// 设置可见才能显示出图片iv.setVisibility(View.GONE);siv.setVisibility(View.VISIBLE);siv.setImageUrl(et1.getText().toString(),R.drawable.ic_launcher);break;}}}

点击浏览就是传统方式,浏览(Smart)就是SmartImage多View

分别点击几次后发现无论是第一次下载速度还是切换速度都是Smart占优

更重要的还是Smart Image View 仅用一行代码

siv.setImageUrl(et1.getText().toString(),R.drawable.ic_launcher);

就实现了之前的Thread+Handler几十行代码的功能,还带有缓存机制,是智能多了

SmartImageView 是继承至 ImageView ,所以兼容性应该不是什么问题,而且本身也是作为ImageView的替代品做出来的

SmartImageView is a drop-in replacement for Android’s standard ImageView which additionally allows images to be loaded from URLs or the user’s contact address book. Images are cached to memory and to disk for super fast loading.

用Android Smart Image View做的一个网络图片浏览的Demo相关推荐

  1. Android之自定义View以及画一个时钟

    https://www.2cto.com/kf/201509/443112.html 概述: 当Android自带的View满足不了开发者时,自定义View就发挥了很好的作用. 建立一个自定义View ...

  2. Android Smart Image View

    SmartImageView的设计初衷是来取代Android自带的ImgageView组件,另外它还提供了一些附加功能,如: 支持通过URL来加载图片: 支持从电话簿中加载图片: 异步加载图片: 图片 ...

  3. moba寻路_GitHub - ylmbtm/MoBaDemo: 用Unity做的一个类Moba游戏Demo

    游戏整体逻辑 出兵逻辑 游戏会在两个阵营的固定区域在固定的频率中出兵.小兵只能沿着规定好的轨道进行行走,并按照各个防守塔的顺序向敌方进行进攻. 需要注意的点 对于固定出现的小兵来说,不适合在其死亡之后 ...

  4. moba寻路_GitHub - aafasou/MoBaDemo: 用Unity做的一个类Moba游戏Demo

    游戏整体逻辑 出兵逻辑 游戏会在两个阵营的固定区域在固定的频率中出兵.小兵只能沿着规定好的轨道进行行走,并按照各个防守塔的顺序向敌方进行进攻. 需要注意的点 对于固定出现的小兵来说,不适合在其死亡之后 ...

  5. 仿照淘宝首页做的一个高度伪对齐demo

    功能就是当右边高度没有左边高的情况下做的一些处理,由于本人技术有限,不兼容所有浏览器, <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tra ...

  6. 做了一个系列的Android开发教程列表

    做了一个系列的Android开发教程列表.花了半天多的专题 里面包含了 4个系列的教程. 也包含了很多Android开发资料. 喜欢的人可以收藏哦:http://dev.apkbus.com/

  7. 【Android】最近做的一个Android平台下时间统计工具

    最近在完成实验室的项目之后花了一点时间弄了一个小应用.因为自己也算是手机重度手机依赖患者,平时虽然玩手机时间不长,但是很频繁,所以一直想要知道自己每天打开手机多少次,用了哪些应用,以及每个应用花了多少 ...

  8. android点击按钮弹出图片,用android做的一个简单的点击按钮显示图片的程序

    其实,在这之前我已经做了一个点击按钮的小程序,只不过它只是用来在界面上显示一些文字或者是用一个对话框来显示内容.按理说,做显示图片应该是不会有太大的问题了,可是问题还是来了.在我把这些个问题解决之后, ...

  9. Android等待对话框(做一个带动态效果的对话框)

    又到了动画总结的时间了,今天要总结的是一个对话框形式的动画效果,老样子gif图不太清晰,但是总体的效果是可以看的清楚的,一个动态的等待对话框,我只是简单的实现了一些动画,如果需要更复杂的需求,可以联系 ...

最新文章

  1. python下载大文件mp4_python合并大量ts文件成mp4格式(ps:上限是450,亲测)
  2. Android Studio提示忽略大小写
  3. boost::format模块异常处理的测试程序
  4. gateway sentinel 熔断 不起作用_《一起学sentinel》一
  5. 程序员如何快速消除自己的知识短板?
  6. 修改PATH导致fedora无法登录XWindow
  7. 函数局部有界性定理_高数第五章多元函数微分学
  8. Java日志框架(二)
  9. 路由模块router实现step1
  10. c语言设计四路彩灯显示系统,数字电路逻辑设计课程设计-四路彩灯显示系统设计...
  11. 快速安装制作黑苹果macOS High Sierr系统
  12. 2019互联网行业程序员工资大数据报告
  13. 使用cmd打开任意软件
  14. 怎么保存ppt到计算机,怎么把ppt保存到u盘
  15. uboot环境下mmc操作_android uboot中的mmc命令
  16. Windows部分软件乱码教你快速解决
  17. 一起来找茬:下面这段代码是让计算机在屏幕上输出“hi”。其中有三个错误,快来改正吧
  18. 学苑教育杂志学苑教育杂志社学苑教育编辑部2022年第32期目录
  19. JAVA计算机毕业设计新生入学报到管理系统Mybatis+系统+数据库+调试部署
  20. yield关键字用法

热门文章

  1. ST-LINK无法识别;固件升级/降级方法
  2. 旅游行业网站怎么搭建?
  3. Exel将一张表拆分为多张表格以及安装方方格子
  4. 欧洲电信标准化协会(ETSI)介绍
  5. 潮人篮球ios android,潮人篮球ios怎么在电脑上玩?潮人篮球ios电脑版玩法教程!...
  6. 树莓派4B 寄存器基地址查询
  7. 拼多多,拼什么?商业模式+店铺运营+爆品打造
  8. 利用Debug Api 获得QQ密码
  9. 数学符号π (Pi)、Σ(Capital Sigma)、μ (Mu) 、σ(sigma)、∏(capital pi), ∫(Integral Symbol)的来历...
  10. 电脑入门必懂的常识7