广告
返回顶部
首页 > 资讯 > 精选 >Android怎么自定义scrollview实现回弹效果
  • 657
分享到

Android怎么自定义scrollview实现回弹效果

2023-06-29 19:06:13 657人浏览 泡泡鱼
摘要

本篇内容主要讲解“Android怎么自定义scrollview实现回弹效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android怎么自定义scrollview实现回弹效果”吧! 新建MyS

本篇内容主要讲解“Android怎么自定义scrollview实现回弹效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android怎么自定义scrollview实现回弹效果”吧!

新建MyScrollView并继承ScrollView,可以通过事件分发机制拦截并处理滑动事件

重写事件分发拦截事件onInterceptTouchEvent方法,计算是否需要拦截事件

//拦截:实现父视图对子视图的拦截//是否拦截成功,取决于方法的返回值。返回值true:拦截成功。反之,拦截失败private int lastY;//上一次y轴方向操作的坐标位置    private Rect nORMal = new Rect();//用于记录临界状态的左、上、右、下    private boolean isFinishAnimation = true;//是否动画结束    private int lastX, downX, downY;    @Override    public boolean onInterceptTouchEvent(MotionEvent ev) {        boolean isIntercept = false;        int eventX = (int) ev.getX();        int eventY = (int) ev.getY();        switch (ev.getAction()) {            case MotionEvent.ACTION_DOWN:                lastX = downX = eventX;                lastY = downY = eventY;                break;            case MotionEvent.ACTION_MOVE:                //获取水平和垂直方向的移动距离                int absX = Math.abs(eventX - downX);                int absY = Math.abs(eventY - downY);                if(absY > absX && absY >= dp2px(10)){                    isIntercept = true;//执行拦截                }                lastX = eventX;                lastY = eventY;                break;        }        return isIntercept;    }

得到scrollview的子view,便于操作

//获取子视图    @Override    protected void onFinishInflate() {        super.onFinishInflate();        if (getChildCount() > 0) {            childView = getChildAt(0);        }    }

计算是否需要平移动画

private boolean isNeedMove() {        int childMeasuredHeight = childView.getMeasuredHeight();//获取子视图的高度        int scrollViewMeasuredHeight = this.getMeasuredHeight();//获取布局的高度        Log.e("TAG", "childMeasuredHeight = " + childMeasuredHeight);        Log.e("TAG", "scrollViewMeasuredHeight = " + scrollViewMeasuredHeight);        int dy = childMeasuredHeight - scrollViewMeasuredHeight;//dy >= 0        int scrollY = this.getScrollY();//获取用户在y轴方向上的偏移量 (上 + 下 -)        if (scrollY <= 0 || scrollY >= dy) {            return true;//按照我们自定义的MyScrollView的方式处理        }        //其他处在临界范围内的,返回false。即表示,仍按照ScrollView的方式处理        return false;    }

判断是否需要平移动画

//判断是否需要执行平移动画    private boolean isNeedAnimation() {        return !normal.isEmpty();    }

既然我们做了事件拦截,那么就要重写ontouchevent来执行响应事件

@Override    public boolean onTouchEvent(MotionEvent ev) {        if (childView == null || !isFinishAnimation) {            return super.onTouchEvent(ev);        }        int eventY = (int) ev.getY();//获取当前的y轴坐标        switch (ev.getAction()) {            case MotionEvent.ACTION_DOWN:                lastY = eventY;                break;            case MotionEvent.ACTION_MOVE:                int dy = eventY - lastY;//微小的移动量                if (isNeedMove()) {                    if (normal.isEmpty()) {                        //记录了childView的临界状态的左、上、右、下                        normal.set(childView.getLeft(), childView.getTop(), childView.getRight(), childView.getBottom());                    }                    //重新布局                    childView.layout(childView.getLeft(), childView.getTop() + dy / 2, childView.getRight(), childView.getBottom() + dy / 2);                }                lastY = eventY;//重新赋值                break;            case MotionEvent.ACTION_UP:                if (isNeedAnimation()) {                    //使用平移动画                    int translateY = childView.getBottom() - normal.bottom;                    TranslateAnimation translateAnimation = new TranslateAnimation(0, 0, 0, -translateY);                    translateAnimation.setDuration(200);//        translateAnimation.setFillAfter(true);//停留在最终位置上                    translateAnimation.setAnimationListener(new Animation.AnimationListener() {                        @Override                        public void onAnimationStart(Animation animation) {                            isFinishAnimation = false;                        }                        @Override                        public void onAnimationEnd(Animation animation) {                            isFinishAnimation = true;                            childView.clearAnimation();//清除动画                            //重新布局                            childView.layout(normal.left, normal.top, normal.right, normal.bottom);                            //清除normal的数据                            normal.setEmpty();                        }                        @Override                        public void onAnimationRepeat(Animation animation) {                        }                    });                    //启动动画                    childView.startAnimation(translateAnimation);                }                break;        }        return super.onTouchEvent(ev);    }

这样整个view的核心部分已经完成了,把view嵌套到定义好了的scrollview就可以实现页面的滑动回弹效果了。

到此,相信大家对“Android怎么自定义scrollview实现回弹效果”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: Android怎么自定义scrollview实现回弹效果

本文链接: https://www.lsjlt.com/news/326180.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android怎么自定义scrollview实现回弹效果
    本篇内容主要讲解“Android怎么自定义scrollview实现回弹效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android怎么自定义scrollview实现回弹效果”吧! 新建MyS...
    99+
    2023-06-29
  • Android自定义scrollview实现回弹效果
    在ios手机上经常看到页面上下滑动回弹效果,安卓中没有原生控件支持,这里自己就去自定义一个scrollview实现回弹效果 1. 新建MyScrollView并继承ScrollVie...
    99+
    2022-11-13
  • Android自定义ScrollView实现放大回弹效果实例代码
    1,刚刚在别人开源的项目中看到了一个挺不错的用户体验,效果图如下: 2,那下面我们就来实现一下,首先看一下布局,由于一般只是我们包含头像的那部分方法,所以这里我们要把布局分成...
    99+
    2022-06-06
    scrollview Android
  • Android怎么自定义ScrollView实现阻尼回弹
    今天小编给大家分享一下Android怎么自定义ScrollView实现阻尼回弹的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。...
    99+
    2023-06-29
  • Android自定义ScrollView实现阻尼回弹
    Android开发中,当一个页面存放的控件超出屏幕时,通常需要使用ScrollView来包裹布局。这样用户可以通过手指的滑动来查看超出屏幕的部分。然而当ScrollView滑动到边界...
    99+
    2022-11-13
  • Android怎么自定义View实现竖向滑动回弹效果
    这篇文章主要介绍“Android怎么自定义View实现竖向滑动回弹效果”,在日常操作中,相信很多人在Android怎么自定义View实现竖向滑动回弹效果问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Andro...
    99+
    2023-06-30
  • Android自定义View实现竖向滑动回弹效果
    本文实例为大家分享了Android自定义View实现滑动回弹的具体代码,供大家参考,具体内容如下 前言 Android 页面滑动的时候的回弹效果 一、关键代码 public clas...
    99+
    2022-11-13
  • Android实现自定义的弹幕效果
    一、效果图 先来看看效果图吧~~ 二、实现原理方案 1、自定义ViewGroup-XCDanmuView,继承RelativeLayout来实现,当然也可以继承其他三大布局类...
    99+
    2022-06-06
    自定义 Android
  • Android怎么自定义弹框Dialog效果
    今天小编给大家分享一下Android怎么自定义弹框Dialog效果的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。具体效果如下...
    99+
    2023-06-30
  • Android 中怎么利用ScrollView实现反弹效果
    本篇文章给大家分享的是有关Android 中怎么利用ScrollView实现反弹效果,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。自定义ScrollView控件: p...
    99+
    2023-05-30
    android scrollview
  • 怎么在Android中利用ScrollView实现一个放大回弹效果
    这期内容当中小编将会给大家带来有关怎么在Android中利用ScrollView实现一个放大回弹效果,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。自定义ScrollView创建一个类,继承ScrollVi...
    99+
    2023-05-31
    scrollview android roi
  • Android自定义弹框Dialog效果
    本文实例为大家分享了Android自定义弹框Dialog效果的具体代码,供大家参考,具体内容如下 1.dialog_delete.xml <xml version=...
    99+
    2022-11-13
  • Android自定义View实现弹性小球效果
    照例先看效果图 自定义代码示例 public class BezierView extends View { Paint paint;//画笔 Path path;//...
    99+
    2022-06-06
    弹性 view Android
  • Android自定义弹出框dialog效果
    项目要用到弹出框,还要和苹果的样式一样(Android真是没地位),所以就自己定义了一个,不是很像(主要是没图),但是也还可以。废话不多说了,直接上代码先看布局文件<?xml version="1.0" encoding="u...
    99+
    2023-05-31
    android 弹出框 dialog
  • Android自定义弹窗提示效果
    本文实例为大家分享了Android 自定义弹窗提示的具体代码,供大家参考,具体内容如下 Java文件: private void showSetDeBugDialog() { ...
    99+
    2022-11-12
  • 怎么在Android中使用ScrollView实现一个下拉弹回动画效果
    本篇文章给大家分享的是有关怎么在Android中使用ScrollView实现一个下拉弹回动画效果,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Android是什么Android...
    99+
    2023-05-30
    android scrollview
  • Android自定义实现可回弹的ScollView
    前言 仿IOS回弹效果为了增强用户体验,自定义一个可回弹的ScrollView是一个不错的选择,而且这种效果还是很简单的 把原来的ScollView标签替换一下就好了 <xm...
    99+
    2022-11-13
  • android怎么实现可上下回弹的scrollview
    本篇内容主要讲解“android怎么实现可上下回弹的scrollview”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“android怎么实现可上下回弹的scrollview”吧! 新建MyScr...
    99+
    2023-06-30
  • android ScrollView怎么实现水平滑动回弹
    这篇文章主要介绍“android ScrollView怎么实现水平滑动回弹”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“android ScrollView怎么实现水平滑动回弹”...
    99+
    2023-06-30
  • ionic如何实现自定义弹框效果
    这篇文章给大家分享的是有关ionic如何实现自定义弹框效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。思路利用ionic自带的弹框$ionicPopup。隐藏头部和尾部,只保留...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作