文章目录

  • 一、自定义组件构造方法简介
    • 1、View(Context context) 构造函数
    • 2、View(Context context, @Nullable AttributeSet attrs)
    • 3、View(Context context, @Nullable AttributeSet attrs, int defStyleAttr) 构造函数
    • 4、View(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) 构造函数
  • 二、代码示例
  • 三、源码及资源下载

官方文档 API : BitmapRegionDecoder

一、自定义组件构造方法简介


1、View(Context context) 构造函数


在代码中创建 View 对象 , 就会调用该构造函数 , 其中 Context context 参数是组件运行的环境 , 可以从该 Context 对象中获取当前的主题 , 资源等 ;

    /*** 代码中创建组件调用该方法* @param context View 组件运行的上下文对象 , 一般是 Activity ,*                可以通过该上下获取当前主题 , 资源等*/public LongImageView(Context context) {super(context);}

2、View(Context context, @Nullable AttributeSet attrs)


1 . 构造函数简介 :

① 构造函数使用时机 : 布局文件中使用组件调用该方法 , 当 View 组件从 XML 布局文件中构造时 , 调用该方法 ;

② 属性指定 : 提供的 AttributeSet 属性在 XML 文件中指定 ;

③ 默认风格 : 该方法使用默认的风格 defStyleAttr = 0 , 该组件的属性设置只有 Context 中的主题和 XML 中的属性 ;

2 . 参数分析 :

① Context context 参数 : View 组件运行的上下文环境 , 通过该对象可以获取当前主题 , 资源等 ;

② AttributeSet attrs 参数 : XML 布局文件中的 View 组件标签中的属性值 ;

    /*** 布局文件中使用组件调用该方法 ;* 当 View 组件从 XML 布局文件中构造时 , 调用该方法* 提供的 AttributeSet 属性在 XML 文件中指定 ;* 该方法使用默认的风格 defStyleAttr = 0 ,* 该组件的属性设置只有 Context 中的主题和 XML 中的属性 ;** @param context View 组件运行的上下文环境 ,*                通过该对象可以获取当前主题 , 资源等* @param attrs XML 布局文件中的 View 组件标签中的属性值*/public LongImageView(Context context, @Nullable AttributeSet attrs) {super(context, attrs);}

3、View(Context context, @Nullable AttributeSet attrs, int defStyleAttr) 构造函数


1 . 构造函数简介 :

① 构造函数使用时机 : 布局文件中使用组件调用该方法 , 当 View 组件从 XML 布局文件中构造时 , 调用该方法 ;

② 主题风格 : 从 XML 中加载组件同时还会提供一个主题属性风格 ;

③ 属性指定 : 提供的 AttributeSet 属性在 XML 文件中指定 ;

④ 主题风格 : View 组件使用该构造方法 , 从布局中加载时 , 允许使用一个特定风格 ;

⑤ 示例 : 如 : 按钮类的构造函数会传入 defStyleAttr = R.attr.buttonStyle 风格作为参数 ;

2 . 参数分析 :

① Context context 参数 : View 组件运行的上下文环境 , 通过该对象可以获取当前主题 , 资源等 ;

② AttributeSet attrs 参数 : XML 布局文件中的 View 组件标签中的属性值 ;

③ int defStyleAttr 参数 : 默认的 Style 风格 , 当前的应用 Application 或 Activity 设置了风格主题后 , 才生效 ;

    /*** 布局文件中加载组件 , 并提供一个主题属性风格 ;* View 组件使用该构造方法 , 从布局中加载时 , 允许使用一个特定风格 ;* 如 : 按钮类的构造函数会传入 defStyleAttr = R.attr.buttonStyle 风格作为参数 ;** @param context View 组件运行的上下文环境 ,*                通过该对象可以获取当前主题 , 资源等* @param attrs XML 布局文件中的 View 组件标签中的属性值* @param defStyleAttr 默认的 Style 风格*                     当前的应用 Application 或 Activity 设置了风格主题后 , 才生效*/public LongImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}

4、View(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) 构造函数


1 . 版本兼容 : Android 5.0(API 级别 21)LOLLIPOP 版本加入的构造函数 , 定义该构造函数 , 必须加上 @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) 注解 ;

2 . 构造函数简介 :

① 构造函数使用时机 : 布局文件中使用组件调用该方法 , 当 View 组件从 XML 布局文件中构造时 , 调用该方法 ;

② 主题风格或资源 : 从 XML 中加载组件同时还会提供一个主题属性风格 , 或资源 ;

③ 属性指定 : 提供的 AttributeSet 属性在 XML 文件中指定 ;

④ 主题风格 : View 组件使用该构造方法 , 从布局中加载时 , 允许使用一个特定风格 ;

⑤ 示例 : 如 : 按钮类的构造函数会传入 defStyleAttr = R.attr.buttonStyle 风格作为参数 ;

3 . 属性设置优先级 ( 优先级从高到低 ) :

  • 布局文件中的标签属性 AttributeSet

  • defStyleAttr 指定的默认风格

  • defStyleRes 指定的默认风格

  • 主题的属性值

4 . 参数分析 :

① Context context 参数 : View 组件运行的上下文环境 , 通过该对象可以获取当前主题 , 资源等 ;

② AttributeSet attrs 参数 : XML 布局文件中的 View 组件标签中的属性值 ;

③ int defStyleAttr 参数 : 默认的 Style 风格 , 当前的应用 Application 或 Activity 设置了风格主题后 , 才生效 ;

④ int defStyleRes 参数 : style 资源的 id 标识符 , 提供组件的默认值 , 只有当 defStyleAttr 参数是 0 时 , 或者主题中没有 style 设置 ; 默认可以设置成 0 ;

    /*** 布局文件中加载组件 , 并提供一个主题属性属性 , 或风格资源 ;* 该构造方法允许组件在加载时使用自己的风格 ;** 属性设置优先级 ( 优先级从高到低 )* 1. 布局文件中的标签属性 AttributeSet* 2. defStyleAttr 指定的默认风格* 3. defStyleRes 指定的默认风格* 4. 主题的属性值** @param context View 组件运行的上下文环境 ,*                通过该对象可以获取当前主题 , 资源等* @param attrs XML 布局文件中的 View 组件标签中的属性值* @param defStyleAttr 默认的 Style 风格*                     当前的应用 Application 或 Activity 设置了风格主题后 , 才生效* @param defStyleRes style 资源的 id 标识符 , 提供组件的默认值 ,*                    只有当 defStyleAttr 参数是 0 时 , 或者主题中没有 style 设置 ;*                    默认可以设置成 0 ;*/@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)public LongImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {super(context, attrs, defStyleAttr, defStyleRes);}

二、代码示例


package kim.hsl.lgl;import android.content.Context;
import android.os.Build;
import android.util.AttributeSet;
import android.view.View;import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;/*** 长图展示自定义 View 组件**/
public class LongImageView extends View {/*** 代码中创建组件调用该方法* @param context View 组件运行的上下文对象 , 一般是 Activity ,*                可以通过该上下获取当前主题 , 资源等*/public LongImageView(Context context) {super(context);}/*** 布局文件中使用组件调用该方法 ;* 当 View 组件从 XML 布局文件中构造时 , 调用该方法* 提供的 AttributeSet 属性在 XML 文件中指定 ;* 该方法使用默认的风格 defStyleAttr = 0 ,* 该组件的属性设置只有 Context 中的主题和 XML 中的属性 ;** @param context View 组件运行的上下文环境 ,*                通过该对象可以获取当前主题 , 资源等* @param attrs XML 布局文件中的 View 组件标签中的属性值*/public LongImageView(Context context, @Nullable AttributeSet attrs) {super(context, attrs);}/*** 布局文件中加载组件 , 并提供一个主题属性风格 ;* View 组件使用该构造方法 , 从布局中加载时 , 允许使用一个特定风格 ;* 如 : 按钮类的构造函数会传入 defStyleAttr = R.attr.buttonStyle 风格作为参数 ;** @param context View 组件运行的上下文环境 ,*                通过该对象可以获取当前主题 , 资源等* @param attrs XML 布局文件中的 View 组件标签中的属性值* @param defStyleAttr 默认的 Style 风格*                     当前的应用 Application 或 Activity 设置了风格主题后 , 才生效*/public LongImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}/*** 布局文件中加载组件 , 并提供一个主题属性属性 , 或风格资源 ;* 该构造方法允许组件在加载时使用自己的风格 ;** 属性设置优先级 ( 优先级从高到低 )* 1. 布局文件中的标签属性 AttributeSet* 2. defStyleAttr 指定的默认风格* 3. defStyleRes 指定的默认风格* 4. 主题的属性值** @param context View 组件运行的上下文环境 ,*                通过该对象可以获取当前主题 , 资源等* @param attrs XML 布局文件中的 View 组件标签中的属性值* @param defStyleAttr 默认的 Style 风格*                     当前的应用 Application 或 Activity 设置了风格主题后 , 才生效* @param defStyleRes style 资源的 id 标识符 , 提供组件的默认值 ,*                    只有当 defStyleAttr 参数是 0 时 , 或者主题中没有 style 设置 ;*                    默认可以设置成 0 ;*/@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)public LongImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {super(context, attrs, defStyleAttr, defStyleRes);}
}

三、源码及资源下载


源码及资源下载地址 :

  • ① GitHub 工程地址 : Long_Graph_Loading

  • ② LongImageView.java 主界面代码地址 : LongImageView.java , 这是上述示自定义组件代码 ;

【Android 内存优化】自定义组件长图组件 ( 自定义组件构造方法 )相关推荐

  1. 【Android 内存优化】Bitmap 长图加载 ( BitmapRegionDecoder 简介 | BitmapRegionDecoder 使用流程 | 区域解码加载示例 )

    文章目录 一.BitmapRegionDecoder 简介 二.图片信息 三.BitmapRegionDecoder 对象创建 四.解码图像 五.图像区域解码示例 六.源码及资源下载 一.Bitmap ...

  2. 【Android 内存优化】自定义组件长图组件 ( 长图滚动区域解码 | 手势识别 GestureDetector | 滑动计算类 Scroller | 代码示例 )

    文章目录 一.GestureDetector 创建与设置 二.GestureDetector 触摸事件传递 三.触摸滑动操作 四.惯性滑动操作 五.长图滑动组件代码示例 六.运行效果 七.源码及资源下 ...

  3. 【Android 内存优化】自定义组件长图组件 ( 获取图像宽高 | 计算解码区域 | 设置图像解码属性 复用 像素格式 | 图像绘制 )

    文章目录 一.获取图像真实宽高 二.计算解码区域 三.设置解码参数 内存复用 像素格式 四.图像绘制 五.执行效果 六.源码及资源下载 官方文档 API : BitmapRegionDecoder 在 ...

  4. 深入探索Android内存优化

    前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. 本篇是Android内存优化的进阶篇,难度会比较大,建议对内存优化不是非常熟悉的前仔细看看在 ...

  5. Android内存优化汇总

    写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上把网上搜集的各种内存零散知识点进行汇总.挑选.简化后整理而成. 所以我将本文定义为一个工具类的文章,如果你在A ...

  6. 深入探索Android内存优化(炼狱级别)

    本文由 jsonchao投稿 微信:bcce5360 前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. 本篇是 Android 内存优化的进阶 ...

  7. 关于Android内存优化

    介绍 在Android系统中,内存分配与释放分配在一定程度上会影响App性能的-鉴于其使用的是类似于Java的GC回收机制,因此系统会以消耗一定的效率为代价,进行垃圾回收. 在中国有句老话:" ...

  8. 深入探索 Android 内存优化(炼狱级别)

    前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. 本篇是 Android 内存优化的进阶篇,难度可以说达到了炼狱级别,建议对内存优化不是非常熟 ...

  9. ANDROID内存优化(大汇总——中)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上 ...

最新文章

  1. optee中的thread_vector_table线程向量表
  2. Python基础入门:常用的os操作
  3. [vue] 说说你对Object.defineProperty的理解
  4. 白中英 计算机组成原理_计算机组成原理 第五版.立体化教材 白中英 大学教材...
  5. linux下利用nohup后台运行jar文件包程序
  6. MySQL中concat函数(连接字符串)
  7. 初识Node.js之Node.js与java作为后台服务器的对比
  8. 机器学习和深度学习_算法测评 | 机器学习VS深度学习
  9. Linux文件系统的目录结构详解
  10. python3.6安装pip3_python3.6如何安装pip
  11. css 文字超出变 ... 点点点
  12. python 英语翻译 excel_Excel自动翻译
  13. handlersocket mysql_Mysql插件之HandlerSocket的安装、配置、使用
  14. 【LISTENER】使用“alter system register;”解决动态监听注册缓慢问题
  15. 实变函数自制笔记7:可测函数的收敛定理
  16. 回头再说012 盘点我的2008年
  17. 外包,你是外包不是正式员工,麻烦不要随便吃公司零食
  18. 14岁初中生将免去四考,保送清华本硕博连读,乡亲们敲锣打鼓祝贺
  19. 想换4K显示器了?那你搞懂啥是4K了吗?
  20. 网络版计算机化系统3q认证,实验室分析仪器3Q确认服务|分析仪器3Q认证服务|计算机系统认证确认服务...

热门文章

  1. 后盾网lavarel视频项目---图片上传
  2. Python爬虫之BeautifulSoup和requests的使用
  3. 转载CopyOnWriteArrayList
  4. 数据库中间件支持数据库集群方案
  5. android 实现模拟加载中的程序
  6. [转]Windows Shell 编程 第十一章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987992】...
  7. Java使用Optional与Stream来取代if判空逻辑(JDK8以上)
  8. 第二次团队作业-需求分析
  9. Python(17)_urllib下的parse的编码解码函数
  10. 一个有关ajax去获取天气预报然后用echarts展现出来的小demo