【Android 内存优化】自定义组件长图组件 ( 自定义组件构造方法 )
官方文档 API : BitmapRegionDecoder
一、自定义组件构造方法简介
1、View(Context context) 构造函数
在代码中创建 View 对象 , 就会调用该构造函数 , 其中 Context context 参数是组件运行的环境 , 可以从该 Context 对象中获取当前的主题 , 资源等 ;
/**
* 代码中创建组件调用该方法
* @param context View 组件运行的上下文对象 , 一般是 Activity ,
* 可以通过该上下获取当前主题 , 资源等
*/
public LongImageView(Context context) {
super(context);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
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);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
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);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
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);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
二、代码示例
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);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
三、源码及资源下载
源码及资源下载地址 :
-
① GitHub 工程地址 : Long_Graph_Loading
-
② LongImageView.java 主界面代码地址 : LongImageView.java , 这是上述示自定义组件代码 ;
文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。
原文链接:hanshuliang.blog.csdn.net/article/details/107115438
- 点赞
- 收藏
- 关注作者
评论(0)