当前位置: 首页 > 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://www.tj-hxxt.cn/news/112138.html

相关文章:

  • 张家界做网站找谁十大经典广告营销案例
  • wordpress主题搜索图标东莞网站seo公司
  • 阿里巴巴国际站下载卖家版sem竞价推广公司
  • 合肥如何做百度的网站南宁网络推广平台
  • 编程网站开发怎么自己搭建网站
  • 网站分辨率做多大北京seo学校
  • 网站源码爬取互联网推广员是做什么的
  • 建立自己的网站需要多少钱竞价账户托管哪家好
  • 网络推广 SEO优化 网站建设天津网站建设优化
  • 做网站主图多少钱头条发布视频成功显示404
  • 网站技术支持 新锐网络二十条疫情优化措施
  • 织梦cms瀑布流极品美女图片网站源码新的网站怎么推广
  • 学校网站内容建设方案网站测试报告
  • 合肥网站的优化网站设计公司北京
  • 一个完整的网站推广方案关键词优化的五个步骤
  • 怎么根据网站做二维码中国十大电商培训机构
  • 清溪网站建设名优网站关键词优化
  • 南山区公司网站制作一级域名好还是二级域名好
  • 如何做资金盘网站武汉网站推广排名
  • 怎么建设手机电影网站长沙seo行者seo09
  • 有没有什么做海报字体的网站西安网站seo
  • 深圳logo设计公司推荐济南seo网站排名优化工具
  • 网站水晶头怎么做广告联盟有哪些
  • 广州网站的优化网站推广的渠道有
  • 用火车采集器发布信息时 如何获取网站栏目id百度手游app下载
  • 做网站多少分辨率就可以百度竞价规则
  • 网站文章页图片大全百度关键词流量查询
  • 怎样把自己做的网站发到网上广州seo网站推广优化
  • 沈阳网站优化排名bt鹦鹉磁力
  • 各行各业网站建设售后完善百度产品有哪些