前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Android 内存优化】自定义组件长图组件 ( 自定义组件构造方法 )

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

作者头像
韩曙亮
发布于 2023-03-27 13:57:50
发布于 2023-03-27 13:57:50
82700
代码可运行
举报
运行总次数:0
代码可运行

文章目录

官方文档 API : BitmapRegionDecoder

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


1、View(Context context) 构造函数


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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /**
     * 代码中创建组件调用该方法
     * @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 组件标签中的属性值 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /**
     * 布局文件中使用组件调用该方法 ;
     * 当 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 设置了风格主题后 , 才生效 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /**
     * 布局文件中加载组件 , 并提供一个主题属性风格 ;
     * 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 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /**
     * 布局文件中加载组件 , 并提供一个主题属性属性 , 或风格资源 ;
     * 该构造方法允许组件在加载时使用自己的风格 ;
     *
     * 属性设置优先级 ( 优先级从高到低 )
     * 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);
    }

二、代码示例


代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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);
    }
}

三、源码及资源下载

源码及资源下载地址 :

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-07-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一、前端基础-JavaScript-JavaScript数据类型
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <!-- JavaScript堆内存与栈内存 1、堆内存:基本数据类型,如整型,字符串 2、栈内存:引用数据类型,如对象 --> <!-- JavaScript的基本数据类型 1、数字类型:Number,包括整型int和浮点型float和NaN, NaN是number类型,但是NaN不等于
堕落飞鸟
2022/02/14
3120
IT课程 JavaScript基础 039_类型转换
类型转换是将一个数据类型转换为另一个数据类型的过程。类型转换可以是隐式的(由JavaScript引擎自动完成)或显式的(通过编码进行手动转换)。
zhaoJian.Net
2024/09/24
1150
前端学习(27)~js学习(五): typeof和数据类型转换
typeof()表示“获取变量的数据类型”,返回的是小写,语法为:(两种写法都可以)
Vincent-yuan
2020/03/18
1.3K0
JavaScript数据类型隐式转换
JavaScript的数据类型之前已经讲过了,忘记的小伙伴出门左转,查看**搞懂JavaScript的数据类型**
闲花手札
2021/09/08
9180
面试官:JavaScript的数据类型你了解多少?
作为JavaScript的入门知识点,Js数据类型在整个JavaScript的学习过程中其实尤为重要。最常见的是边界数据类型条件判断问题。
Vam的金豆之路
2021/12/01
6980
面试官:JavaScript的数据类型你了解多少?
JavaScript 数据类型转换完全攻略
JavaScript 能够根据运算环境自动转换值的类型,以满足运算需要。但是在很多情况下需要开发者手动转换数据类型,以控制运算过程。
用户3519280
2023/07/07
3670
经常被面试官问道的JavaScript数据类型知识你真的懂吗?
之前面试了几个开发者,他们确实做过不少项目,能力也是不错的,但是发现js基础不扎实, 于是决定写一下这篇javascrip数据类型相关的基础文章,其实也不仅仅是因为面试了他们,之前自己在面试的时候,也曾经被虐过,面试官说过的最深刻的一句话我到现在都记得。
coder_koala
2019/07/23
6510
经常被面试官问道的JavaScript数据类型知识你真的懂吗?
深度剖析之由浅入深揭秘JavaScript类型转换(最全总结篇)
沉浸式趣谈
2024/03/13
2020
深度剖析之由浅入深揭秘JavaScript类型转换(最全总结篇)
深入理解JavaScript数据类型转换
JavaScript是一门灵活多变的编程语言,其中数据类型转换是其核心特性之一。在JavaScript中,数据类型转换涉及将一个数据类型转换为另一个,以满足不同操作的需求。这个过程可能会引发一些意外结果,因此理解JavaScript中的数据类型转换至关重要。本文将深入探讨JavaScript数据类型转换,包括隐式类型转换和显式类型转换,以及如何避免常见的陷阱和错误。
海拥
2023/10/14
4050
初中级前端必须要知道的JS数据类型
计算机世界中定义的数据类型其实就是为了描述现实世界中存在的事实而定义的。比如我们用人来举例:
用户4456933
2021/06/01
1.6K0
初中级前端必须要知道的JS数据类型
JavaScript 基本数据类型转换
数据类型转换是我们在前端开发中经常遇到的场景,一般而言,在 JavaScript 中类型转换有三种情况:
编程三昧
2022/01/22
7270
JavaScript 基本数据类型转换
JavaScript 的数据类型 相关知识点
JavaScript的数据类型分为两类:原始类型(primitive type)和对象类型(object type)
书童小二
2018/09/03
5960
JavaScript 的数据类型 相关知识点
JS进阶-数据类型的判断方式以及转换方式的汇总
强制类型转换方式包括 Number()、parseInt()、parseFloat()、toString()、String()、Boolean()
小渔夫
2022/05/10
1.1K0
JS进阶-数据类型的判断方式以及转换方式的汇总
玩转JS的类型转换黑科技
js身为一种弱类型的语言,不用像c语言那样要定义int、float、double、string等等数据类型,因为允许变量类型的隐式转换和允许强制类型转换。我们在定义一个变量的时候,就一个var、let、const搞定,不用担心数据的类型。比如常见的字符串拼接,用+号可以实现变量和字符串的拼接。 总的来说,一般的规则是
lhyt
2022/09/21
1.5K0
玩转JS的类型转换黑科技
【面试利器】原生JavaScript灵魂拷问,你能答上多少(一)
当下的前端开发中,三大框架横行,框架的强大让我们很难再提起对原生 JavaScript 的兴趣,原生 JavaScript 所用也越来越少。
玖柒的小窝
2021/10/22
9680
JavaScript中的类型转换、判断类型相关知识
基本数据类型:String、Number、Boolean、Null、Undefined、Symbol、BigInt
用户10562852
2023/06/09
4620
JavaScript中的类型转换、判断类型相关知识
【Java 进阶篇】JavaScript 数据类型详解
JavaScript是一种弱类型脚本语言,具有动态类型。这意味着JavaScript中的变量可以容纳不同类型的数据,并且它们的类型可以在运行时更改。在本文中,我们将深入探讨JavaScript中的数据类型,包括原始数据类型和引用数据类型,以及如何使用它们创建变量和操作数据。
繁依Fanyi
2023/10/12
2460
【Java 进阶篇】JavaScript 数据类型详解
你不知道的 JavaScript 中卷(1、类型)
最近在读《你不知道的 JavaScript 中卷》,不会像上卷那样通篇仔细阅读一章一章的写博客了,因为我没那么多精力了。我每天花一点时间去写一些简单且篇幅不长的博客,这样在地铁或在电梯里花一分钟就可以读完。
Karl Du
2023/10/20
3660
JavaScript中的typeof操作符 类型转换
HTML5学堂:JavaScript是弱变量类型的语言,有些时候我们需要知道变量的数据类型,并且需要进行数据类型的转换,我们通过这篇文章来学习一下如何获取变量的数据类型,以及数字和字符串如何相互转换。 typeof操作符 由于JavaScript是弱数据类型的语言,因此需要有一种方法检测变量的数据类型,这时我们可以用typeof来检测变量的数据类型。例如: var str = "HTML5学堂"; var num = 111; var obj = {"name": "HTML5学堂"}; var blank
HTML5学堂
2018/03/12
1.3K0
js数据转换为html,JavaScript怎么进行类型转换?「建议收藏」
JavaScript怎么进行类型转换?下面本篇文章就来介绍一下使用javascript进行类型转换的方法,希望对大家有所帮助。
全栈程序员站长
2022/09/09
1.6K0
推荐阅读
相关推荐
一、前端基础-JavaScript-JavaScript数据类型
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验