Android仿IOS阻尼效果,上下弹性滑动,改变背景颜色

本文介绍如何在Android应用中实现模仿iOS的阻尼效果,上下弹性滑动并改变背景颜色。作者在原有搜索到的工具类基础上进行修改,解决了在顶部或底部滑动时的回弹问题,提供了详细的代码实现和解释。

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

之前在做项目的时候碰到过一个问题,废话不多说,先看我自己录制的一个效果

刚开始是想着百度搜索去看有没有合适的工具类,果不其然,搜到了很多,这里我贴上两个博客地址,大家可以先去看他们的再来看我的

https://blog.youkuaiyun.com/jky_yihuangxing/article/details/51981888

https://blog.youkuaiyun.com/zhangjg_blog/article/details/19193671

说的都很详细

可是应用到项目中会发现若我们的界面停留在顶部或底部,你再次去上拉下拉松手时就会导致回弹一部分,这是因为本身的效果就是可弹性滑动,还可回归原本位置。导致这一问题很影响用户体验,我就在此基础之上修改了他们的代码整合了起来。先贴出来如下

package com.sam.im.fddmall.view;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Shader;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.TranslateAnimation;
import android.widget.ScrollView;

import com.sam.im.fddmall.R;

import static com.sam.im.fddmall.app.App.selectedColor;
import static com.sam.im.fddmall.mall.activity.MallCircleDetailActivity.linearHegiht;
import static com.sam.im.fddmall.mall.fragment.MallCircleFragment.linearHegiht_Circle;
import static com.sam.im.fddmall.mall.fragments.HomePageFragment.linearHegiht_Home;
import static com.sam.im.fddmall.uis.fragments.SetTwoFragment.linearHegiht_setTwo;

/**
 * 带滚动监听的scrollview,可以计算向上滑动的距离来判断标题栏的透明度颜色
 */
public class ObservableScrollView extends ScrollView {

    private static final String TAG = "ObservableScrollView";

    // 当滑动的距离最小到10,才认为是上下滑动
    private static final float MINI_DISTANCE = 10.0f;

    //移动因子, 是一个百分比, 比如手指移动了100px, 那么View就只移动50px
    //目的是达到一个延迟的效果
    private static final float MOVE_FACTOR = 0.5f;

    //松开手指后, 界面回到正常位置需要的动画时间
    private static final int ANIM_TIME = 200;

    //ScrollView的子View, 也是ScrollView的唯一一个子View
    private View contentView;

    //手指按下时的Y值, 用于在移动时计算移动距离
    //如果按下时不能上拉和下拉, 会在手指移动时更新为当前手指的Y值
    private float startY;

    //用于记录正常的布局位置
    private Rect originalRect = new Rect();

    //手指按下时记录是否可以继续下拉
    private boolean canPullDown = false;

    //手指按下时记录是否可以继续上拉
    private boolean canPullUp = false;

    //在手指滑动的过程中记录是否移动了布局
    private boolean isMoved = false;

    //用来判断背景颜色的处理
    private int deltaY = 0;

    private int colorStart = 0;//下拉
    private int colorEnd = 0;//上拉



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

    public ObservableScrollView(Context context, AttributeS
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值