iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >androidScrollView实现水平滑动回弹
  • 337
分享到

androidScrollView实现水平滑动回弹

2024-04-02 19:04:59 337人浏览 独家记忆
摘要

本文实例为大家分享了Android ScrollView实现水平滑动回弹的具体代码,供大家参考,具体内容如下 在研究了View的一些属性之后做了个Scroll的水平滑动回弹。 效果图

本文实例为大家分享了Android ScrollView实现水平滑动回弹的具体代码,供大家参考,具体内容如下

在研究了View的一些属性之后做了个Scroll的水平滑动回弹。

效果图:

主要代码:

import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.TranslateAnimation;
import android.widget.HorizontalScrollView;
 

public class MHorizontalScrollView extends HorizontalScrollView {
 
    private View view;
    
    private static final int deltaX = 1;
    private Rect nORMalRt = new Rect();
 
    public MHorizontalScrollView(Context context) {
        super(context);
    }
 
    public MHorizontalScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
 
    
    protected void onFinishInflate() {
        if (getChildCount() > 0) {
            view = getChildAt(0);
        }
    }
 
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (view != null) {
            onTouchEventImpl(event);
        }
        return super.onTouchEvent(event);
    }
 
    private void onTouchEventImpl(MotionEvent event) {
        switch (event.getAction()) {
        case MotionEvent.ACTION_MOVE:
            // 在当前视图内容继续偏移(x , y)个单位,显示(可视)区域也跟着偏移(x,y)个单位
            scrollBy(deltaX, 0);
            // 当滚动到最左或最右时就不会再滚动,这时移动布局达到回弹效果
            if (isLayoutMove()) {
                if (normalRt.isEmpty()) {
                    // 保存当前正常的布局位置,拉过头才能回弹到正常位置
                    normalRt.set(view.getLeft(), view.getTop(),
                            view.getRight(), view.getBottom());
 
                }
                // 移动布局
                view.layout(view.getLeft() - deltaX, view.getTop(),
                        view.getRight() - deltaX, view.getBottom());
            }
            break;
        case MotionEvent.ACTION_UP:
            if (isNeedAnimation()) {
                animationImpl();
            }
            break;
        default:
            break;
        }
    }
 
    
    private void animationImpl() {
        // 移动动画
        TranslateAnimation ta = new TranslateAnimation(view.getLeft(),
                normalRt.left, 0, 0);
        // 动画持续时间
        ta.setDuration(50);
        view.startAnimation(ta);
        // 设置回到当前正常的布局位置
        view.layout(normalRt.left, normalRt.top, normalRt.right,
                normalRt.bottom);
        normalRt.setEmpty();
    }
 
    
    private boolean isNeedAnimation() {
        return !normalRt.isEmpty();
    }
 
    
    private boolean isLayoutMove() {
        int offset = view.getMeasuredWidth() - getWidth();
        if (offset <= 0) {
            return false;
        }
        // 上面已固定deltaX=1,scrollX永远等于1所以向右拉不动
        // 但当向左拉动到内容布局的最右端时scrollX == offset时还可以继续拉动
        int scrollX = getScrollX();
        if (scrollX == 0 || scrollX == offset) {
            return true;
        }
        return false;
    }
 
}

在xml布局文件里直接使用:

<LinearLayout xmlns:android="Http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" 
    android:background="@drawable/background"
    >
 
    <cn.qhg.MHorizontalScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:scrollbars="none" 
        >
 
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="horizontal" 
            android:paddingTop="100dp"
            android:id="@+id/ll_test"
            android:onClick="test"
            >
 
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/house_1" 
                android:layout_marginRight="40dp"
                />
 
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/house_4" 
                android:layout_marginRight="40dp"
                />
 
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/house_2"
                android:layout_marginRight="40dp"
                 />
 
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/house_3"
                android:layout_marginRight="40dp"
                 />
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/house_1" 
                android:layout_marginRight="40dp"
                />
 
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/house_4" 
                android:layout_marginRight="40dp"
                />
 
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/house_2"
                android:layout_marginRight="40dp"
                 />
 
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/house_3"
                android:layout_marginRight="40dp"
                 />
            <!-- 使右边多空一点 -->
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="20dp"
                 />
        </LinearLayout>
    </cn.qhg.MHorizontalScrollView>
 
</LinearLayout>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: androidScrollView实现水平滑动回弹

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

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

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

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

下载Word文档
猜你喜欢
  • androidScrollView实现水平滑动回弹
    本文实例为大家分享了android ScrollView实现水平滑动回弹的具体代码,供大家参考,具体内容如下 在研究了View的一些属性之后做了个Scroll的水平滑动回弹。 效果图...
    99+
    2024-04-02
  • android ScrollView怎么实现水平滑动回弹
    这篇文章主要介绍“android ScrollView怎么实现水平滑动回弹”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“android ScrollView怎么实现水平滑动回弹”...
    99+
    2023-06-30
  • js实现水平和竖直滑动条
    最近在做练手项目时候,需要用到滑动条,所以就稍微研究了一下。 首先来看水平滑动条,效果图如下: 代码如下: <html> <head> <m...
    99+
    2024-04-02
  • js如何实现水平和竖直滑动条
    这篇文章主要介绍js如何实现水平和竖直滑动条,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!首先来看水平滑动条,效果图如下:代码如下:<html> <head>  ...
    99+
    2023-06-20
  • recycleview实现拼多多首页水平滑动效果
    本文实例为大家分享了recycleview实现拼多多首页水平滑动效果的具体代码,供大家参考,具体内容如下 1.说明  本例子模仿拼多多首页的水平菜单,原本计划用viewpa...
    99+
    2024-04-02
  • recycleview如何实现拼多多首页水平滑动效果
    这篇文章给大家分享的是有关recycleview如何实现拼多多首页水平滑动效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。本文实例为大家分享了recycleview实现拼多多首页水平滑动效果的具体代码,供大家参...
    99+
    2023-06-15
  • Android SeekBar实现平滑滚动
    本文实例为大家分享了Android SeekBar实现平滑滚动的具体代码,供大家参考,具体内容如下 由于项目需要,SeekBar只需要三个档,但是如果只设置三个档会很难滑,看着也不好...
    99+
    2024-04-02
  • Android自定义View实现竖向滑动回弹效果
    本文实例为大家分享了Android自定义View实现滑动回弹的具体代码,供大家参考,具体内容如下 前言 Android 页面滑动的时候的回弹效果 一、关键代码 public clas...
    99+
    2024-04-02
  • Android实现背景图滑动变大松开回弹效果
    本文实例为大家分享了Android实现背景图滑动变大松开回弹的具体代码,供大家参考,具体内容如下 原图 放大后 1、自定义view继承ScrollView实现效果 public ...
    99+
    2024-04-02
  • Android实现平滑翻动效果
    本文实例为大家分享了Android实现平滑翻动效果的具体代码,供大家参考,具体内容如下 效果 1.activity加implements implements GestureD...
    99+
    2024-04-02
  • Android Scroller实现弹性滑动效果
    本文实例为大家分享了Android Scroller实现弹性滑动的具体代码,供大家参考,具体内容如下 首先看下实现效果,可以看到当我们手指松开时图片会逐渐滑动到初始位置,而不是直接跳...
    99+
    2024-04-02
  • android实现可以滑动的平滑曲线图
    本文实例为大家分享了android实现可以滑动的平滑曲线图的具体代码,供大家参考,具体内容如下 直接上代码,里面有详细注解 1 attr 属性编写    <...
    99+
    2024-04-02
  • Android怎么自定义View实现竖向滑动回弹效果
    这篇文章主要介绍“Android怎么自定义View实现竖向滑动回弹效果”,在日常操作中,相信很多人在Android怎么自定义View实现竖向滑动回弹效果问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Andro...
    99+
    2023-06-30
  • Android使用HorizontalScrollView实现水平滚动
    要在Android中使用HorizontalScrollView实现水平滚动,可以按照以下步骤进行操作:1. 在XML布局文件中添加...
    99+
    2023-08-22
    Android
  • Android怎么实现背景图滑动变大松开回弹效果
    这篇文章主要讲解了“Android怎么实现背景图滑动变大松开回弹效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android怎么实现背景图滑动变大松开回弹效果”吧!原图放大后自定义vie...
    99+
    2023-06-30
  • 在WPF中怎么实现平滑滚动
    本篇内容介绍了“在WPF中怎么实现平滑滚动”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!WPF实现滚动条还是比较方便的,只要在控件外围加上S...
    99+
    2023-07-02
  • Android如何实现平滑翻动效果
    这篇文章给大家分享的是有关Android如何实现平滑翻动效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体内容如下效果activity加implementsimplements GestureDet...
    99+
    2023-06-14
  • android怎么实现可以滑动的平滑曲线图
    本文小编为大家详细介绍“android怎么实现可以滑动的平滑曲线图”,内容详细,步骤清晰,细节处理妥当,希望这篇“android怎么实现可以滑动的平滑曲线图”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1 att...
    99+
    2023-07-02
  • PyQt通过动画实现平滑滚动的QScrollArea
    目录前言实现过程SmoothScrollBarSmoothScrollArea测试前言 在之前的博客《如何在 pyqt 中实现平滑滚动的 QScrollArea》中,我们使用定时器和...
    99+
    2023-01-28
    PyQt动画实现平滑滚动QScrollArea PyQt 平滑滚动QScrollArea PyQt QScrollArea
  • 如何用CSS实现平滑滚动效果
    如何用CSS实现平滑滚动效果在网页设计与开发中,滚动效果是一种非常常见且炫酷的效果,能够为用户带来更好的体验。而实现平滑滚动效果,可以通过CSS的一些技巧来实现。本文将介绍如何使用CSS来实现平滑滚动效果,并提供具体的代码示例。一、使用锚点...
    99+
    2023-11-21
    平滑 CSS 滚动效果
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作