setImageResource和setImageDrawable区别

ImageView设置图片的方式有很多钟,可以在xml里面写android:src=”@drawable/xxx”,也可以在java代码里面设置。

在java里面的设置方式也有多种,方法包括:setImageResource,setImageDrawable,setImageBitmap

在xml里面设置实际上和在java里面调用setImageResource是一样的,当然xml多了一个解析的过程,放到java代码里调用会稍微好些(实际没什么区别)。

3种设置图片方式的区别:

(1)setImageResource的参数是resId,必须是drawable目录下的资源.另外,在setImageResource方法中有写明了注释

* <pclass="note">This does Bitmap reading and decoding on the UI

* thread, which can cause a latency hiccup.If that‘s a concern,

* consider using {@link #setImageDrawable(android.graphics.drawable.Drawable)}or

* {@link #setImageBitmap(android.graphics.Bitmap)} and

* {@link android.graphics.BitmapFactory} instead.</p>

这个方法是在UI线程中对图片读取和解析的,所以有可能对一个Activity的启动造成延迟。所以如果顾虑到这个官方建议用setImageDrawable和setImageBitmap来代替。

(2)setImageBitmap参数是Bitmap,可以解析不同来源的图片再进行设置。不过我们看看setImageBitmap的源码:

@android.view.RemotableViewMethod

public void setImageBitmap(Bitmap bm) {

// if this is used frequently, mayhandle bitmaps explicitly

// to reduce the intermediate drawable object

setImageDrawable(newBitmapDrawable(mContext.getResources(), bm));

}

实际上setImageBitmap做的事情就是把Bitmap对象封装成Drawable对象,然后调用setImageDrawable来设置图片。因此代码里面才写上了建议,如果需要频繁调用这个方法的话最好自己封装个固定的Drawable对象,直接调用setImageDrawable,这样可以减少Drawable对象。因为每次调用setImageBitmap方法都会对Bitmap对象new出一个Drawable。

(3)setImageDrawable参数是Drawable,也是可以接受不同来源的图片,方法中所做的事情就是更新ImageView的图片。上面两个方法实际上最后调用的都是setImageDrawable(setImageResource没有直接调用,不过更新的方法与setImageDrawable一样)。

所以综合来看setImageDrawable是最省内存高效的,如果担心图片过大或者图片过多影响内存和加载效率,可以自己解析图片然后通过调用setImageDrawable方法进行设置。

时间: 2024-08-26 17:55:23

setImageResource和setImageDrawable区别的相关文章

Android开发之图片详解(4)

接上一篇. 主要研究下bitmap和drawable的使用,以及两者的区别. 先看测试代码: package com.example.imagetext; import java.util.ArrayList; import java.util.List; import com.example.imagetext.R.drawable; import android.annotation.SuppressLint; import android.app.Activity; import andr

从Android资源角度谈Android代码内存优化

原文链接:http://www.codeceo.com/article/android-resource-android-mem.html 这篇文章主要介绍在实际Android应用程序的开发中,容易导致内存泄露的一些情况.开发人员如果在进行代码编写之前就有内存泄露方面的基础知 识,那么写出来的代码会强壮许多,写这篇文章也是这个初衷.本文从Android开发中的资源使用情况入手,介绍了如何在Bitmap.数据库查询.9- patch.过渡绘制等方面优化内存的使用. Android资源优化 1. B

Android_ImageView简单实现图片翻转

效果图 1)可以把图像的id存放数组中,利用setImageResource()或setImageDrawable()方法(放在数组中便于循环) 2)已经是第一张图像时,再点击"上一页",应Toast提示:已经是第一张图像,并不再往前翻:同样,已经是最后一张图像时,再点击"下一页",应Toast提示:已经是最后一张图像,并不再往后翻.   给出源代码 <?xml version="1.0" encoding="utf-8"

android ImageView setImageDrawable 和 setImageResource 的区别

1. setImageResource是同步的,资源图片的读取和解码都是在主线程中进行的.setImageDrawable是异步的. 2. 加载速度的区别.setImageResource要快于setImageDrawable和setImageBitmap. /** * Sets a drawable as the content of this ImageView. * * <p class="note">This does Bitmap reading and deco

bitmap和drawable的相互转化以及setImageResource(),setImageDrawable(),setImageBitmap()

从本地获取drawable图片:getResources().getDrawable(R.drawable.**) 获取bitmap:Bitmap b=BitmapFactory().decodeResource(context.getResource(),R.drawable.**); drawable转bitmap: Drawable a=**;Bitmap b=(BitmapDrawable)a.getBitmap() bitmap转drawable: Bitmap  b=** Drawb

从零开始学android开发-setBackgroundDrawable与setBackgroundResource的区别

setBackgroundDrawable和setBackgroundResource的区别很多网友不知道View类提供的setBackgroundDrawable和setBackgroundResource的区别是什么,同时Android View类很多子类比如TextView.ImageView中都有这些方法,同时还有一些类似setImageDrawable.setImageBitmap和setImageResource()这些方法的不同之处. 一.setBackgroundXXX的用处,设

android中src和background区别

ImageView中XML属性src和background的区别: background会根据ImageView组件给定的长宽进行拉伸,而src就存放的是原图的大小,不会进行拉伸.src是图片内容(前景),bg是背景,可以同时使用. 此外:scaleType只对src起作用:bg可设置透明度,比如在ImageButton中就可以用android:scaleType控制图片的缩放方式, 示例代码如下: 1 <ImageView 2 android:id="@+id/img" 3 a

ImageView的src和background的区别

参考资料: http://blog.csdn.net/dalleny/article/details/14048375 http://www.android100.org/html/201508/27/177067.html 区别如下: 1.  background会根据ImageView组件给定的长宽进行拉伸,而src就存放的是原图的大小,不会进行拉伸,如果想要对src进行拉伸的话,使用android:scaleType 2.  src是图片内容(前景),bg是背景,可以同时使用. 3.  此

Drawable和Bitmap区别

Bitmap - 称作位图,一般位图的文件格式后缀为bmp,当然编码器也有很多如RGB565.RGB888.作为一种逐像素的显示对象执行效率高,但是缺点也很明显存储效率低.我们理解为一种存储对象比较好.    Drawable - 作为Android平下通用的图形对象,它可以装载常用格式的图像,比如GIF.PNG.JPG,当然也支持BMP,当然还提供一些高级的可视化对象,比如渐变.图形等. A bitmap is a Drawable. A Drawable is not necessarily