当前位置 博文首页 > 启舰:《Anroid自定义控件开发入门与实战》勘误

    启舰:《Anroid自定义控件开发入门与实战》勘误

    作者:[db:作者] 时间:2021-06-30 12:38

    对于读者回馈的错误之处,加以正更,感谢大家的支持

    如果大家发现哪里有错误,请在留言中反馈,反馈时请标注第几节,哪一页,以方便我定位,非常感谢。

    本书资源及第一章、第一章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)

    如果我的文章对你有帮助的话,你可能更喜欢我的公众号
    在这里插入图片描述

    下一篇:没有了