文档章节

setImageResource和setImageDrawable区别

 一斌
发布于 2016/07/27 14:30
字数 531
阅读 7
收藏 0

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方法进行设置。

本文转载自:http://jingyan.baidu.com/article/6525d4b1332117ac7d2e9433.html

共有 人打赏支持
粉丝 0
博文 3
码字总数 125
作品 0
浦东
程序员
私信 提问
加载中

评论(1)

一斌
2
ImageSwitcher的使用

ImageSwitcher类是ViewSwitcher类的子类,它实现的效果是在完成ImageView的切换并且带有动画效果。要使用这个类需要以下两个步骤: 1)为ImageSwitcher类提供一个ViewFactory,该ViewFactory...

summerpxy
2014/03/25
760
0
ImageView 显示图片的几种办法

首先设置布局中的imageView如下 image2.setBackground(getResources().getDrawable(R.drawable.blackk));//变形 image2.setBackgro...

天王盖地虎626
2014/12/23
54.4K
8
BreadcrumbLayout——基于TabLayout的Android面包屑视图控件

BreadcrumbLayout是一款基于TabLayout的Android面包屑视图控件。 BreadcrumbLayout 用法: 1、添加如下代码到布局文件中:

alunbar
2016/05/19
309
0
GridView 无法显示文字

public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; Kindergarten entity = list.get(position); if (convertView != null && conver......

yfy
2013/04/27
349
1
Android ImageButton

public classImageButtonextends ImageViewjava.lang.Object↳ android.view.View↳ android.widget.ImageView↳ android.widget.ImageButton直接子类ZoomButton ImageButton是上面带有图片的......

amigos_wu
2012/05/25
0
1

没有更多内容

加载失败,请刷新页面

加载更多

说一说MySQL的锁机制

锁概述   MySQL的锁机制,就是数据库为了保证数据的一致性而设计的面对并发场景的一种规则。   最显著的特点是不同的存储引擎支持不同的锁机制,InnoDB支持行锁和表锁,MyISAM支持表锁。...

开元中国2015
23分钟前
5
0
浅谈教你如何掌握Linux系统

浅谈教你如何掌握Linux系统 linux能做什么?相信绝大数人都有这样的疑问。可以玩吃鸡吗?可以玩lol吗? 如果你是以娱乐的名义来评价linux的可用性,对不起,linux可能不适合你,因为linux是一...

linuxCool
29分钟前
3
0
基于Spring Boot实现图片上传/加水印一把梭操作

文章共 537字,阅读大约需要 2分钟 ! 概述 很多网站的图片为了版权考虑都加有水印,尤其是那些图片类网站。自己正好最近和图片打交道比较多,因此就探索了一番基于 Spring Boot这把利器来实...

CodeSheep
41分钟前
3
0
设计一个可拔插的 IOC 容器

前言 磨了许久,借助最近的一次通宵上线 cicada 终于更新了 v2.0.0 版本。 之所以大的版本号变为 2,确实是向下不兼容了;主要表现为: 修复了几个反馈的 bug。 灵活的路由方式。 可拔插的 ...

crossoverJie
今天
4
0
Apache和PHP结合,httpd的虚拟主机配置

httpd配置支持php 上次安装httpd2.4对应的配置文件:/usr/local/apache2.4/conf/httpd.conf 编辑配置文件,修改以下4个地方 ServerName Require all denied AddType application/x-httpd-ph...

野雪球
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部