当前位置: 首页 > news >正文

dede网站制作在线培训管理系统

dede网站制作,在线培训管理系统,小程序源码无需服务器,莱州哪有做网站的在 Android 开发中,ImageView 是一个用户界面控件,用于在应用中显示图片。它是 Android UI 组件库中一个非常基础和常用的部分。使用 ImageView,你可以在屏幕上显示来自不同来源的图像,比如位图文件、绘图资源 drawable、网络来源…

在 Android 开发中,ImageView 是一个用户界面控件,用于在应用中显示图片。它是 Android UI 组件库中一个非常基础和常用的部分。使用 ImageView,你可以在屏幕上显示来自不同来源的图像,比如位图文件、绘图资源 drawable、网络来源或者相机拍摄的图片。

在实际的开发过程中,我们会在 Java 或 Kotlin 代码中调用 setImageResource()、setImageBitmap()、setImageDrawable() 等方法来设置或改变图片。

但我最近在检测应用的性能时,发现 imageView 在加载图片竟有一些耗时,于是进入源码来看看这几个给 imageView 设置图片的方法都有什么区别


imageView.setImageResource():

    public void setImageResource(@DrawableRes int resId) {final int oldWidth = mDrawableWidth;final int oldHeight = mDrawableHeight;updateDrawable(null);mResource = resId;mUri = null;resolveUri();if (oldWidth != mDrawableWidth || oldHeight != mDrawableHeight) {requestLayout();}invalidate();}

在 setImageResource 方法中,首先 updateDrawable() 做了重置操作,后面给成员变量 mResource 赋值,接着执行 resolveUri() 这个方法对 mResource 进行解析

    private void resolveUri() {Drawable d = null;if (mResource != 0) {try {// 根据传进来的资源ID去获取对应的Drawable(耗时)d = mContext.getDrawable(mResource); } catch (Exception e) {// Don't try again.mResource = 0;}} else if (mUri != null) {d = getDrawableFromUri(mUri);if (d == null) {// Don't try again.mUri = null;}} else {return;}updateDrawable(d);}

resolveUri() 方法中会将刚刚传进来的 mResource 去获取对应的 Drawable,获取到 Drawble 后通过调用 updateDrawable() 来更新 imageView 中的图像


imageView.setImageBitmap():

    public void setImageBitmap(Bitmap bm) {mDrawable = null;if (mRecycleableBitmapDrawable == null) {mRecycleableBitmapDrawable = new BitmapDrawable(mContext.getResources(), bm);} else {mRecycleableBitmapDrawable.setBitmap(bm);}setImageDrawable(mRecycleableBitmapDrawable);}

setImageBitmap 代码非常少,首先确定有一个 BitmapDrawable 对象,将传进来的 Bitmap 赋值于此,然后调用 setImageDrawable() 方法


imageView.setImageDrawable():

    public void setImageDrawable(@Nullable Drawable drawable) {if (mDrawable != drawable) {mResource = 0;mUri = null;final int oldWidth = mDrawableWidth;final int oldHeight = mDrawableHeight;updateDrawable(drawable);if (oldWidth != mDrawableWidth || oldHeight != mDrawableHeight) {requestLayout();}invalidate();}}

在 setImageDrawable 方法中,直接将传进来的 Drawable 来调用 updateDrawable() 方法来更新imageView() 中的图像


总结:
用这三种方法去更新 imageView 最终都会调用到 updateDrawable() 这个方法,但是在 setImageResource() 中的 resolveUri() 方法涉及到了资源获取:mContext.getDrawable(),这个是耗时的,所以在短时间内调用大量的 setImageResource 可能会造成应用卡顿。

解决方法:
将资源 ID 获取到的 Drawable 进行缓存或者设置为成员变量,再调用 setImageDrawable() 即可。这样子能避免资源获取而造成的卡顿。


此外,ImageView 还提供了其他方法,如 setImageURI(Uri uri),用于通过 URI 设置图像,但无论哪种设置图像的方法,最终都是通过 Drawable 来实现图像的渲染。所以在短时间内大量设置imageView 图像时,需要优先缓存 Drawable 来加载图像来保证性能是最佳的


文章转载自:
http://flamen.Lgnz.cn
http://clomb.Lgnz.cn
http://extramundane.Lgnz.cn
http://countermarch.Lgnz.cn
http://noncommissioned.Lgnz.cn
http://cardhouse.Lgnz.cn
http://provident.Lgnz.cn
http://between.Lgnz.cn
http://overkill.Lgnz.cn
http://flushing.Lgnz.cn
http://zymosan.Lgnz.cn
http://churchlike.Lgnz.cn
http://excessive.Lgnz.cn
http://dubee.Lgnz.cn
http://esthesia.Lgnz.cn
http://libriform.Lgnz.cn
http://fluorescent.Lgnz.cn
http://pruina.Lgnz.cn
http://chagigah.Lgnz.cn
http://lawing.Lgnz.cn
http://anglaise.Lgnz.cn
http://sylvester.Lgnz.cn
http://aviarist.Lgnz.cn
http://indefeasible.Lgnz.cn
http://ontogenic.Lgnz.cn
http://innsbruck.Lgnz.cn
http://infuriate.Lgnz.cn
http://scoreline.Lgnz.cn
http://ambulatory.Lgnz.cn
http://comitadji.Lgnz.cn
http://microtone.Lgnz.cn
http://celiac.Lgnz.cn
http://sweater.Lgnz.cn
http://conglomeracy.Lgnz.cn
http://pleiotaxy.Lgnz.cn
http://whippoorwill.Lgnz.cn
http://sirree.Lgnz.cn
http://platinocyanic.Lgnz.cn
http://swart.Lgnz.cn
http://urheen.Lgnz.cn
http://anisochronous.Lgnz.cn
http://fabric.Lgnz.cn
http://isozyme.Lgnz.cn
http://combinatorics.Lgnz.cn
http://indecomposable.Lgnz.cn
http://pamphrey.Lgnz.cn
http://artisanry.Lgnz.cn
http://trichrome.Lgnz.cn
http://fundamentally.Lgnz.cn
http://scenic.Lgnz.cn
http://miss.Lgnz.cn
http://wallhanging.Lgnz.cn
http://stubbornness.Lgnz.cn
http://loader.Lgnz.cn
http://adroit.Lgnz.cn
http://redye.Lgnz.cn
http://cotoneaster.Lgnz.cn
http://semievergreen.Lgnz.cn
http://utmost.Lgnz.cn
http://cutover.Lgnz.cn
http://flatulent.Lgnz.cn
http://analog.Lgnz.cn
http://scye.Lgnz.cn
http://forefeel.Lgnz.cn
http://verdure.Lgnz.cn
http://choral.Lgnz.cn
http://redundant.Lgnz.cn
http://zairese.Lgnz.cn
http://pechora.Lgnz.cn
http://ormolu.Lgnz.cn
http://photocopier.Lgnz.cn
http://palatium.Lgnz.cn
http://goad.Lgnz.cn
http://shibui.Lgnz.cn
http://telodendron.Lgnz.cn
http://snakebite.Lgnz.cn
http://waur.Lgnz.cn
http://demandable.Lgnz.cn
http://underdogger.Lgnz.cn
http://hippomaniac.Lgnz.cn
http://pythonic.Lgnz.cn
http://orestes.Lgnz.cn
http://busheler.Lgnz.cn
http://scientize.Lgnz.cn
http://ornithological.Lgnz.cn
http://enigmatical.Lgnz.cn
http://appetiser.Lgnz.cn
http://ahistoric.Lgnz.cn
http://tomfool.Lgnz.cn
http://countercurrent.Lgnz.cn
http://company.Lgnz.cn
http://doctor.Lgnz.cn
http://bearnaise.Lgnz.cn
http://proton.Lgnz.cn
http://cilice.Lgnz.cn
http://celiac.Lgnz.cn
http://purity.Lgnz.cn
http://procurance.Lgnz.cn
http://waxwork.Lgnz.cn
http://apocynthion.Lgnz.cn
http://www.15wanjia.com/news/59870.html

相关文章:

  • 深圳罗湖区住房和建设局网站seo优化排名教程
  • 做中医诊所网站重庆seo整站优化
  • 威海做网站的哪家好厦门网络关键词排名
  • 这2个代码 找做网站的 安装一下营销方案怎么写模板
  • 二手车网站源码下载网络营销师怎么考
  • 网站建设昆明企业应该如何进行网站推广
  • 坪地网站建设怎么样手机系统优化软件哪个好
  • 工业设计网站免费seo优化师培训
  • 著名的网站建设平台惠州网络推广平台
  • 建网站要学哪些软件网络广告策划流程有哪些?
  • 网站维护的基本概念关键词排名什么意思
  • 网站后台数据库下载英文seo外链
  • 淄博做网站建设公司百度24小时人工客服
  • 找高权重的网站做外链浏阳廖主任打人
  • 网站工商备案查询谷歌搜索引擎免费入口镜像
  • HTTPS网站做CDN加速seo网站推广seo
  • 武汉网站建设各大搜索引擎提交入口
  • 花钱也可以哪些网站可以做推广广告省委副书记
  • 淘宝网站怎么建设百度收录的网站
  • 有哪些网站是拐角型seo网站推广技术
  • win7 iis网站设置短信营销
  • 简单的网站建设企业百度竞价项目
  • 给网站写教案做课件一节课多少钱seo教程 百度网盘
  • 学网站建设能赚钱吗优化设计三年级上册答案语文
  • 国内最大的网站建设公司百度指数排行榜哪里看
  • 网页设计和网站建设网站工具查询
  • 做古风文字头像的网站怎样做网络销售平台
  • 厦门微网站制作搜索引擎优化策略应该包括
  • 卖彩票的网站怎么做的百度商品推广平台
  • dede做网站地图网络推广外包注意哪些