《Anroid自定义控件开发入门与实战》勘误
Posted 启舰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Anroid自定义控件开发入门与实战》勘误相关的知识,希望对你有一定的参考价值。
对于读者回馈的错误之处,加以正更,感谢大家的支持
如果大家发现哪里有错误,请在留言中反馈,反馈时请标注第几节,哪一页,以方便我定位,非常感谢。
本书资源及第一章、第一章PDF下载地址:https://github.com/harvic/androidCustomCtrlRes
第三章
3.5.4 常用函数
P125
整个页面的结论都有问题。
AnimatorSet 真正激活延时 = AnimatorSet.startDelay + 第一个动画.startDelay;
应该改为:
AnimatorSet 真正激活延时 = AnimatorSet.startDelay;
原因:
在Android 6、7、8、9平台上运行,该问题都已经被修复了,AnimatorSet的延时,只跟它自己设置的startDelay有关,不再跟具体的动画有关。
致谢:Renext(QQ)
3.5.5 示例:路径动画
P131
原文:
4、存在的问题
至此,这个路径动画就讲解完了,但如果多使用几次会发现,这里的动画存在问题:………………(略)
更正:
这里所讲的问题,已经在Android 6及以上API修正了,对于Android 6以上的版本,已经可以直接使用缩小到0的代码。(由于手上没有Android 5的机器,至于Android 5是否修复,只能靠大家自己尝试下,确认以后,辛苦回复我更正哈);
致谢:Renext(QQ)
第四章
4.3.1 animateLayoutChanges属性
P156:
原文:
删除控件:
private void removeButtonView()
if ( i > 0)
linearLayoutContainer.removeViewAt(0);
i -- ;
更正:
删除控件:
private void removeButtonView()
if ( i > 0)
linearLayoutContainer.removeViewAt(0);
i -- ;
原因:当i–,放在if语句中。因为只有在移除控件的时候才会减一,而且 i 表示的是当前控件的个数,最小也只能是0,不能是负数。
致谢:Messi小泽儿(CSDN)
4.4.2 NineOldAndroids中的ViewHelper
P165:
原文:
Needs_Proxy是一个静态常量,在程序初始化的时候被赋值,当当前手机API等级大于等于11时被赋值为true,否则被赋值为false。赋值语句如下:
public static final boolean NEEDS_PROXY = Interger.valueOf(Build.VERSION.SDK).intValue() < Build.VERSION_CODES.HONEYCOMB;
这条语句用于判断当前SDK版本是否在API 11以下。如果当前API版本小于11,则NEEDS_PROXY为false;否则为true。
更正:
Needs_Proxy是一个静态常量,在程序初始化的时候被赋值,当当前手机API等级小于11时被赋值为true,否则被赋值为false。
赋值语句如下:
public static final boolean NEEDS_PROXY = Interger.valueOf(Build.VERSION.SDK).intValue() < Build.VERSION_CODES.HONEYCOMB;
这条语句用于判断当前SDK版本是否在API 11以下。如果当前API版本小于11,则NEEDS_PROXY为true;否则为false。
原因:笔误,根据NEEDS_PROXY的赋值代码,可以得知,在小于11时,NEEDS_PROXY为true。
感谢:Renext(QQ)
第七章
7.1.3 贝济埃曲线之rQuadTo
P234:
原文:
比如,上一个终点坐标是(300,400),那么利用rQuadTo(100,-100,200,100);得到的控制点坐标是(300+100,400-100),即(500,300);同样,得到的终点坐标是(300+200,400+100),即(500,500)
比如,利用quadTo()函数定义一个绝对坐标:
path.moveTo(300,400)
path.quadTo(500,300,500,500)
与下面利用rQuadTo()函数定义相对坐标是等价的:
path.moveTo(300,400)
path.rQuadTo(100,-100,200,100)
修正:
比如,上一个终点坐标是(300,400),那么利用rQuadTo(100,-100,200,100);得到的控制点坐标是(300+100,400-100),即(400,300)
;同样,得到的终点坐标是(300+200,400+100),即(500,500)
比如,利用quadTo()函数定义一个绝对坐标:
path.moveTo(300,400)
path.quadTo(500,300,500,500)
与下面利用rQuadTo()函数定义相对坐标是等价的:
path.moveTo(300,400)
path.rQuadTo(200,-100,200,100)
原因:笔误,在计算时,计算错了……
感谢:柚子(QQ)
第十章:
10.2.1 (P362)
原文: 很多读者一旦需要画布,就会创建一个全屏幕大小的Bitmap作为画布。我们现在就来算一下在一个分辨率是1024像素*768像素的屏幕上,创建一个与屏幕同样大小的Bitmap,到底需要多少内存?也就是说,这个屏幕长度上有1024个像素,宽度上768个像素。我们假设每个像素使用ARGB_8888格式来存储,也就是一个像素占32位,那么要全屏显示这张图片所占的内存大小=1024*768*32B=24MB
更正:我们假设每个像素使用ARGB_8888格式来存储,也就是一个像素占32位,即4字节(4B),那么要全屏显示这张图片所占的内存大小=1024*768*4B=3MB
原因:在P361页有写,对于ARGB_8888格式而言,一个像素点占32位,即4字节(4B),所以1024768个像素点的大小应该是1024768*4B=3MB
致谢:冷`雅熙(QQ)、小王子(VIVO)
10.2.3
P372:
原文:
public static int calSampleSize(BitmapFactory.Options options,int dstWidth,int dstHeight)
int rawWidth = options.outWidth;
int rawHeight = options.outHeight;
int inSampleSize = 1;
if(rawWidth > dstWidth || rawHeight > dstHeight)
float ratioHeight = (float)rawHeight/dstHeight;
float ratioWidth = (float)rawWidth/dstHeight;
inSampleSize = (int)Math.min(ratioWidth,ratioHeight);
return inSampleSize;
修正:
public static int calSampleSize(BitmapFactory.Options options,int dstWidth,int dstHeight)
int rawWidth = options.outWidth;
int rawHeight = options.outHeight;
int inSampleSize = 1;
if(rawWidth > dstWidth || rawHeight > dstHeight)
float ratioHeight = (float)rawHeight/dstHeight;
float ratioWidth = (float)rawWidth/dstWidth
;
inSampleSize = (int)Math.min(ratioWidth,ratioHeight);
return inSampleSize;
原因:笔误,计算宽度的缩放系数,应当是两个宽度相比。
致谢:柚子(QQ)
如果我的文章对你有帮助的话,你可能更喜欢我的公众号
以上是关于《Anroid自定义控件开发入门与实战》勘误的主要内容,如果未能解决你的问题,请参考以下文章
《Android App开发入门与项目实战》资源下载和内容勘误
《Android App开发入门与项目实战》资源下载和内容勘误