Android 自定义Title根据滑动距离动画效果

本文介绍如何在Android中实现一个自定义标题栏,该标题栏根据ScrollView的滑动距离展示动画效果。通过获取ScrollView的滚动距离,自定义TitleView在不同位置展示不同效果,如隐藏图标。实现过程包括创建带滚动监听的ScrollView,定义标题栏的布局和动画逻辑,并提供了使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 预览图

图比较大,有6M左右,网速较慢的请耐心等待

image

2. 需求拆解

  1. 首先取得当前ScrollView的滑动距离
  2. 自定义TitleView,根据滚动距离展示不同的效果
  3. 标题栏分为3个部分:圆角背景、图标、文字
  4. 只有在最底部的时候,才显示图标,其他时候不显示图标
  5. 定义背景和文本的原始位置信息和目标位置信息,然后根据滚动距离动态计算实际的位置信息
  6. 在onDraw中根据实际位置信息,绘制背景和文字

3. 带滚动监听的ScrollView

低版本的ScrollView是没有类似onScrollChangeListener的监听器的,因为为了实现兼容,需要自己自定义一个ScrollView

/**
 * Created by chenchen on 2017/8/31.
 */
public class RollCallbackScrollView extends ScrollView {
   

    private OnScrollChangeListener onScrollChangeListener;
    private int threshold = Utils.dip2px(getContext(), 150);

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

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

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

    public void setOnScrollChangeListener(OnScrollChangeListener onScrollChangeListener) {
        this.onScrollChangeListener = onScrollChangeListener;
    }

    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
        if (onScrollChangeListener != null) {
            onScrollChangeListener.onScrollChanged(l, t, oldl, oldt);
        }
    }

    public interface OnScrollChangeListener {
   
        void onScrollChanged(int l, int t, int oldl, int oldt);
    }
}

4. 自定义标题栏控件

因为代码比较简单,解释起来却比较复杂,我就直接在代码中注释,相信大家应该能看得懂

/**
 * Created by chenchen on 2017/9/4.
 */

public class AnimTitleView extends View {
   
    //背景的原始颜色和目标颜色
    private static final int bgFromColor =Color.parseColor("#CC323744");
    private static final int bgToColor =Color.parseColor("#FF2296F3");
    //阈值,在这个值内渐变
    private static final int Threshold = 300;
    // 控件的宽高
    private int width;
    private int height;

    private Paint pai
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值