自定义View系列(八)

Android进阶系列:八、自定义View之音频抖动动效 文章所有资料全部已经打包整理好,另外小编手头上整理了大量Android架构师全套学习资料,Android核心高级技术PDF文档+全套高级学习资料+视频+2021 BAT 大厂面试真题解析资料展示:《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取![外链图片转存中…(img-S4wALEDy-1712598939560)][外链图片转存中…(img-fS6Kb6ev-1712598939560)] 阅读详情

自定义View实战之

自定义实现监听滑动到底部的ScrollView

Android是默认没有提供监听ScrollView滑动到底部的API的,因此,如果我们需要监听ScrollView是否滑动到底部,我们需要自定义ScrollView。

先直接上代码:

public class ScrollBottomScrollView extends ScrollView {
    private OnScrollBottomListener onScrollBottomListener;
    private int calCount;

    public ScrollBottomScrollView(Context context) {
        super(context);
    }

    public ScrollBottomScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public ScrollBottomScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public interface OnScrollBottomListener {
        void scrollToBottom();
    }

    public void setOnScrollBottomListener(OnScrollBottomListener onScrollBottomListener) {
        this.onScrollBottomListener = onScrollBottomListener;
    }

    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        View view = this.getChildAt(0);
        if (this.getHeight() + this.getScrollY() == view.getHeight()) {
            calCount++;
            if (calCount == 1) {
                if (onScrollBottomListener != null) {
                    onScrollBottomListener.scrollToBottom();
                }
            }
        } else {
            calCount = 0;
        }
    }

    //另一种实现方式
    /*@Override
    protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {
        super.onOverScrolled(scrollX, scrollY, clampedX, clampedY);
        if (scrollY != 0 && onScrollBottomListener != null) {
            onScrollBottomListener.scrollToBottom(clampedY);
        }
    }*/
}

然后在业务代码里,

                        scrollView.setOnScrollBottomListener(new ScrollBottomScrollView.OnScrollBottomListener() {
                            @Override
                            public void scrollToBottom() {
                                //业务逻辑处理
                            }
                        });

现在,我们结合代码进行分析:

其实我们的思路是这样的,既然系统没有提供这样一个监听器给我们,那么我们就自定义ScrollView,我们自己写一个监听器,这样不就完了吗。然后我们再将这个监听器对外暴露出去。

我们再来讲一下核心:到底是如何监听到ScrollView滑动到了底部呢?其实有两种办法(上面的代码中都提到了),

办法一:

    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        View view = this.getChildAt(0);
        if (this.getHeight() + this.getScrollY() == view.getHeight()) {
            calCount++;
            if (calCount == 1) {
                if (onScrollBottomListener != null) {
                    onScrollBottomListener.scrollToBottom();
                }
            }
        } else {
            calCount = 0;
        }
    }

办法二:

@Override
    protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {
        super.onOverScrolled(scrollX, scrollY, clampedX, clampedY);
        if (scrollY != 0 && onScrollBottomListener != null) {
            onScrollBottomListener.scrollToBottom(clampedY);
        }
    }

 

Android进阶系列:八、自定义View之音频抖动动效(1) 给大家分享一份移动架构大纲,包含了移动架构师需要掌握的所有的技术体系,大家可以对比一下自己不足或者欠缺的地方有方向的去学习提升;《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!份移动架构大纲,包含了移动架构师需要掌握的所有的技术体系,大家可以对比一下自己不足或者欠缺的地方有方向的去学习提升;**[外链图片转存中…(img-6FI8aoVF-1714874559524)]《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门。 阅读详情

相关推荐

Android进阶系列:八、自定义View之音频抖动动效,android软件开发前景

这样就可以在view中绘制一个矩形,如图所示: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-trYtBNu0-1637140099716)(https://upload-images.jianshu.io/upload_images/14140248-ed1d736aa3661fd6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)] ####绘制多个矩形 现在我们可以绘制多个矩形在画布上。直接采用for循环是不

m0_64319496的博客 553

【5年Android从零复盘系列之八】Android自定义View(3):衍生/扩展式 详解(图文)

1.简述 简而言之,即 如继承TextView,修改默认background、marquee状态时,elevation值、取消默认最小高度等。 2.前提基础 了解View的生命周期,关联Activity联动时的函数调用顺序 【View】构造方法 【View】onFinishInflate() 【Activity】 onCreate() 【Activity】onStart() 【Activity】onResume() 【View】onAttachedToWindow() 【View】onMeasure()

Cupster 5821

Android自定义View系列之详解View的绘制流程

一、开场白 开讲之前我们先预设一种自定义ViewGroup的场景:我们知道LinearLayout、FrameLayout、RelativeLayout...都是系统定义实现的布局,我们想要自定义一个FlowLayout流式布局实现我们自己要的效果(自定义不就是按照自己想要的效果实现的一种布局),流式布局目前Google官方还没帮我们提供,但网上有很多自定义的流式布局,也都是开发者们自己继承ViewGroup实现的,今天以自定义ViewGroup实现流式布局FlowLayout为大前提讲解View的绘.

sunbinkang的博客 5496

重学 Android 自定义 View 系列(八):星星评分控件(RatingBar)

本节实现一个常见的星星评分控件,广泛应用于各种评价类应用中,比如电影评分、商品评价等。难度不大,直接开搂!

WriteBug001的博客 946

简单说说Android自定义view学习推荐的方式

这几天比较受关注,挺开心的,嘿嘿。 这里给大家总结一下学习自定义view的一些技巧。 1.首先 去看看鸿洋神的博客 Android 自定义view(1). 鸿洋神的入门教程讲的很详细。再次膜拜。 然后我这里对上面博客补充一些内容,那就是MeasureSpec相关的一些东西,这些东西我在《圆形百分比》这篇博客里提到过。 ----------------------------

旋转 跳跃 然后 团灭 1万+

Android自定义View系列之理论基础知识

一、坐标系(屏幕坐标系和布局坐标系) 在Android坐标系中,以屏幕左上角作为原点,这个原点向右是X轴的正轴,向下是Y轴正轴,所以开发中调用方法的时候就有了以屏幕上边和左边为参考值,有了参考值你才好定位呀。 除了上面说的Android坐标系,到了View布局的时候有布局坐标系(也称View坐标系,但这种坐标系是相对的,因为Android中的View/ViewGroup是嵌套存在),布局坐标的关系如下图 上图中最里层是一个View(如TextView/Button/ImageView....

sunbinkang的博客 714

一篇文章带你走近Android自定义view

系列文章目录 一篇文章带你走近Android自定义view 文章目录系列文章目录前言一、为什么要自定义view二、先看看一个超级简单的自定义view(三个构造函数)三、了解手机的坐标系四、使用Canvas画一个折线图(重写onDraw()方法)五、如何自定义属性,且在view中获取到属性的值(小提,在六中会有案例)六、绘制图案以及加入设置简单的动画(案例讲解很详细)七、自定义view的实现分类以及自定义组合控件的案例八、简单测量以及自定义接口实例来控制动画的更新计算表达式(onMeasure,TypeE

计蒙不吃鱼的博客 6026

ModbusRTU串口读写报文解析

解析MODBUS报文的格式,讨论异常状态、读多个寄存器与写多个寄存器

Serendipitor的博客 9208

Android自定义View系列:布局自定义

1 布局基础 1.1 布局过程的含义 布局过程,就是程序在运行时利用布局文件的代码来计算出实际尺寸的过程。 1.2 布局过程的工作内容 两个阶段:测量阶段和布局阶段。 测量阶段:从上到下递归地调用每个View或者ViewGroup的 measure() 方法,测量它们的尺寸并计算它们的位置 布局阶段:从上到下调用每个View或者ViewGroup的 layout() 方法,把测得的它们的尺...

Vincent的博客 1427

Windows 10/11 注册表 ProfileImagePath 误改修复:3步恢复用户登录与数据安全

本文详细介绍了Windows 10/11系统中因误改注册表ProfileImagePath键值导致用户无法登录的修复方法。通过3个关键步骤,包括定位SID、安全修复注册表项及验证处理,帮助用户恢复登录并保障数据安全。特别强调了操作顺序的重要性以避免数据丢失,适用于各类Windows用户账户登录错误的紧急处理。

chuoshao2508的博客 403

四阶龙格库塔法求解一次常微分方程组(python实现)

之前在博客发布了关于使用四阶龙格库塔方法求解一次常微分方程组的文章,由于代码缺少具体的验证,部分朋友可能存在疑问,因此这里打算再重新写一篇博客来验证一下程序的正确性,另外,这里是使用python语言来实现的。

HelloWorldTM的博客 8541

自定义view系列aige的博客

自定义view系列1 起步 http://blog.youkuaiyun.com/aigestudio/article/details/41316141#comments 自定义view系列2 Paint 方法介绍大全http://blog.youkuaiyun.com/aigestudio/article/details/41316141#comments LightingColorFilter (int

q178266871的专栏 897

程序员必备75道逻辑思维题(附答案)之二

逻辑训练 身为一个大数据工程师,平时的算法训练还是不能少的,今天给大家看几道我曾经看到的逻辑思维题觉得很好,想分享一下。 【6】一个球、一把长度大约是球的直径2/3长度的直尺.你怎样测出球的半径?方法很多,看看谁的比较巧妙 【7】五个大小相同的一元人民币硬币。要求两两相接触,应该怎么摆? 【8】猜牌问题 S先生、P先生、Q先生他们知道桌子的抽屉里有16张扑克牌:红桃A、Q、4 黑桃J、8、4、2、...

蛋蛋淡淡定的庄园 3546

Android中系统状态栏的隐藏和显示

尤其视频类APP,需要实现切换到横屏后,隐藏系统状态栏,全屏显示,以实现看更大画面的视频。当切换回竖屏后,又显示状态栏。那么如何实现呢?

zdj_Develop的博客 3万+

文档多模态识别工具对比:MinerU、PaddleOCR、Marker

本文对比了三款文档多模态识别工具:MinerU、PaddleOCR和Marker。MinerU专注于中文文档的端到端解析,支持复杂元素提取和结构化输出,适合中文论文和教材解析。PaddleOCR是通用OCR工具包,支持多语言和全流程任务,适用于发票、车牌等图像OCR。Marker则注重多语言支持和轻量化部署,适合英文论文和技术文档的快速转换。三者在核心技术、中文优化、表格处理、输出格式、部署复杂度和适用语言等方面各有优劣。选型建议根据具体需求:MinerU适合高精度中文解析,PaddleOCR适合定制化OC

朴拙科技的博客 4742

基于 Verilog 的经典数字电路设计(10)三态门

三态门(Triple-State Gate)亦称 “三态输出门”、“三态门输出电路”,是一种重要的总线接口电路,具有高电平、低电平和高阻抗三种输出状态的门电路,不过我们通常在设计中比较少见。   三态指其输出既可以是一般二值逻辑电路,即正常的高电平(逻辑 1)或低电平(逻辑 0),又可以保持特有的高阻抗状态,高阻态相当于隔断状态(电阻很大,相当于开路)。

新芯设计的博客 1万+
上一篇: 自定义View系列(七)
下一篇: 自定义View系列(九)
zdj_develop
博客等级 码龄11年 56粉丝 109原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值