Android 将网络的Url资源转换为Drawable资源方式

Overview

在今天的开发学习中,我遇到了一个需求是在App的flash页面添加bing每日一图。这些都简单,但是当我获取到了图片的Url时,我就遇到了一个非常尴尬的问题。就是如何将Url转换为Drawabl并且添加到ImageView.

这边的获取图片的Url就不说了。我们看一下如何将Url转换为Drawable.

Url转换为Drawable

我们先看一下源码:

private Drawable loadImageFromNetwork(String imageUrl) {
 Drawable drawable = null;
 try {
  drawable = Drawable.createFromStream(
    new URL(imageUrl).openStream(), "image.jpg");
 } catch (IOException e) {
  Log.d("test", e.getMessage());
 }
 if (drawable == null) {
  Log.d("test", "null drawable");
 } else {
  Log.d("test", "not null drawable");
 }
 return drawable;
}

这部分就是我们将网络Url资源转换为Drawable资源了。

然后我们根据我们的源码来分析一波:

首相我们创建了一个Drawable

然后我们通过我们的Url资源生成一个Drawable资源。

这样我们的Url网络资源,转换为Drawable就完成。

补充知识:URL转Drawable之 Android中获取网络图片的三种方法

android中获取网络图片是一件耗时的操作,如果直接获取有可能会出现应用程序无响应(ANR:Application Not Responding)对话框的情况。对于这种情况,一般的方法就是耗时操作用线程来实现。下面列三种获取url图片的方法:

1.直接获取:(容易:ANR,不建议)

mImageView = (ImageView)this.findViewById(R.id.imageThreadConcept) ;
Drawable drawable = loadImageFromNetwork(IMAGE_URL);
mImageView.setImageDrawable(drawable) ; 

公用方法:

private Drawable loadImageFromNetwork(String imageUrl)
{
 Drawable drawable = null;
 try {
  // 可以在这里通过文件名来判断,是否本地有此图片
  drawable = Drawable.createFromStream(
    new URL(imageUrl).openStream(), "image.jpg");
 } catch (IOException e) {
  Log.d("test", e.getMessage());
 }
 if (drawable == null) {
  Log.d("test", "null drawable");
 } else {
  Log.d("test", "not null drawable");
 } 

 return drawable ;
} 

2. 后台线程获取url图片:

mImageView = (ImageView)this.findViewById(R.id.imageThreadConcept) ;
new Thread(new Runnable(){
 Drawable drawable = loadImageFromNetwork(IMAGE_URL);
 @Override
 public void run() { 

  // post() 特别关键,就是到UI主线程去更新图片
  mImageView.post(new Runnable(){
  @Override
  public void run() {
   // TODO Auto-generated method stub
   mImageView.setImageDrawable(drawable) ;
  }}) ;
  } 

}).start() ; 

3.AsyncTask获取url图片

mImageView = (ImageView)this.findViewById(R.id.imageThreadConcept) ;
new DownloadImageTask().execute(IMAGE_URL) ;
private class DownloadImageTask extends AsyncTask<String, Void, Drawable>
{ 

  protected Drawable doInBackground(String... urls) {
   return loadImageFromNetwork(urls[0]);
  } 

  protected void onPostExecute(Drawable result) {
   mImageView.setImageDrawable(result);
  }
} 

以上这篇Android 将网络的Url资源转换为Drawable资源方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • android中Bitmap用法(显示,保存,缩放,旋转)实例分析

    本文实例讲述了android中Bitmap用法.分享给大家供大家参考.具体如下: 在Android SDK中可以支持的图片格式如下:png , jpg , gif和bmp. 1.Bitmap的创建 借助于BitmapFactory. 1)资源中的图片 使用BitmapFactory获取位图 复制代码 代码如下: Bitmap bmp = BitmapFactory.decodeResource(this.getResources(), R.drawable.testImg); 或者是: Reso

  • android使用ViewPager实现轮播效果

    ViewPager:一个可以实现视图左右滑动切换的控件. ViewPager的基本使用: ViewPager的视图需要通过PagerAdapter来实现显示. PagerAdapter的主要方法: ● getCount 视图的数量 ● instantiateItem 添加视图 ● destroyItem 销毁视图 ● isViewFromObject 是否由对象创建视图 ViewPager的常用方法: setAdapter 设置适配器 addOnPageChangeListener 监听页面切换

  • Android 将网络的Url资源转换为Drawable资源方式

    Overview 在今天的开发学习中,我遇到了一个需求是在App的flash页面添加bing每日一图.这些都简单,但是当我获取到了图片的Url时,我就遇到了一个非常尴尬的问题.就是如何将Url转换为Drawabl并且添加到ImageView. 这边的获取图片的Url就不说了.我们看一下如何将Url转换为Drawable. Url转换为Drawable 我们先看一下源码: private Drawable loadImageFromNetwork(String imageUrl) { Drawab

  • Android基于TCP和URL协议的网络编程示例【附demo源码下载】

    本文实例讲述了Android基于TCP和URL协议的网络编程.分享给大家供大家参考,具体如下: 手机本身是作为手机终端使用的,因此它的计算能力,存储能力都是有限的.它的主要优势是携带方便,可以随时打开,而且手机通常总是处于联网状态.因此网络支持对于手机应用非常重要. Android完全支持JDK本身的TCP,UDP网络通信API,也可以使用ServerSocket,Socket来建立基于TCP/IP协议的网络通信,也可以使用DatagramSocket,Datagrampacket来建立基于UD

  • Android 中API之Drawable资源详解及简单实例

    Android 中API之Drawable资源 1.最常用的StateListDrawable 说StateListDrawable,很多Android猿可能感到不太熟悉,不过如果说selector选择器,肯定都会恍然大悟,不错,这两个东西就是同一个~~ 它的用途之广,每个app必用,下面就写一个demo,来简要说一下用法. 比如一个登陆界面,它的输入框在获取焦点时需要更改背景,登陆按钮在输入框中有内容时,则更改背景颜色,这时候用selector选择器,那就方便多了,效果如下: EditText

  • Android读取本地或网络图片并转换为Bitmap

    在做android项目时,我们经常需要从本地或者网络读取图片,并转换为Bitmap图片,以便使用,下面是读取本地图片并转换的方法: Java代码 /** * 得到本地或者网络上的bitmap url - 网络或者本地图片的绝对路径,比如: * * A.网络路径: url="http://blog.foreverlove.us/girl2.png" ; * * B.本地路径:url="file://mnt/sdcard/photo/image.png"; * * C.

  • Android从网络中获得一张图片并显示在屏幕上的实例详解

    Android从网络中获得一张图片并显示在屏幕上的实例详解 看下实现效果图: 1:androidmanifest.xml的内容 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cn.capinftotech.image" an

  • Android使用网络获取定位的方法

    本文实例为大家分享了Android使用网络获取定位的具体代码,供大家参考,具体内容如下 目标效果: 程序运行弹出权限选择,选择运行网络定位后会查询位置,然后在TextView上显示当前国家和城市. 1.activity_main.xml页面定义TextView显示城市名. activity_main.xml页面: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:too

  • 探究Android客户端网络预连接优化机制

    目录 一.连接复用 二.预连接实现 三.源码分析 四.优化 五.问答 一.连接复用 对于一个普通的接口请求,通过charles抓包,查看网络请求Timing栏信息,我们可以看到类似如下请求时长信息: Duration 175 ms DNS 6 ms Connect 50 msTLS Handshake 75 ms Request 1 ms Response 1 ms Latency 42 ms 同样的请求,再来一次,时长信息如下所示: Duration 39 ms DNS - Connect -

  • Android中实现根据资源名获取资源ID

    接触过Android开发的同学们都知道在Android中访问程序资源基本都是通过资源ID来访问.这样开发起来很简单,并且可以不去考虑各种分辨率,语言等不同资源显式指定. 痛点 但是,有时候也会有一些问题,比如我们根据服务器端的值取图片,但是服务器端绝对不会返回给我们的是资源id,最多是一种和文件名相关联的值,操作资源少的时候,可以维护一个容器进行值与资源ID的映射,但是多的话,就需要另想办法了. 便捷的方法 在这种情况下,使用文件名来得到资源ID显得事半功倍. 通过调用Resources的get

  • Android中获取资源 id 及资源 id 的动态获取

     Android中获取资源 id 及资源 id 的动态获取 我们平时获取资源是通过 findViewById 方法进行的,比如我们常在onCreate方法中使用这样的语句: btnChecked=(ImageView)findViewById(R.id.imgCheck); findViewById是我们获取layout中各种View 对象比如按钮.标签.ListView和ImageView的便利方法.顾名思义,它需要一个int参数:资源id. 资源id非常有用.Android回自动为每个位于r

  • Android实现网络多线程文件下载

    实现原理 (1)首先获得下载文件的长度,然后设置本地文件的长度. (2)根据文件长度和线程数计算每条线程下载的数据长度和下载位置. 如:文件的长度为6M,线程数为3,那么,每条线程下载的数据长度为2M,每条线程开始下载的位置如下图所示: (网上找的图) 例如10M大小,使用3个线程来下载, 线程下载的数据长度 (10%3 == 0 ? 10/3:10/3+1) ,第1,2个线程下载长度是4M,第三个线程下载长度为2M 下载开始位置:线程id*每条线程下载的数据长度 = ? 下载结束位置:(线程i

随机推荐