iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android实现快速滚动FastScrollView效果
  • 573
分享到

Android实现快速滚动FastScrollView效果

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

先看效果图: public class FastScrollView extends ScrollView { private Rect mBarRect = ne

先看效果图:


public class FastScrollView extends ScrollView {
 
    private Rect mBarRect = new Rect();
    private int mScrollExWidth;
    private int mScrollExHeight;
    private boolean mScrollStart;
    private int dx, dy;
    private int mRightPadding;
 
    public FastScrollView(Context context) {
        super(context);
        init();
    }
 
    public FastScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }
 
    public FastScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }
 
    private void init() {
        mScrollExWidth = dip2px(16); //扩展拖动区域宽度,可自行修改
        mScrollExHeight = dip2px(50); //扩展拖动区域高度,可自行修改
    }
 
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        switch (ev.getAction() & ev.getActionMasked()) {
            case MotionEvent.ACTION_DOWN:
                //Log.e("fly", "down");
                mScrollStart = false;
                if (canScroll()) {
                    dx = (int) ev.getX();
                    dy = (int) ev.getY();
                    float scrollPos = (float) getHeight() / getChildView().getHeight();
                    int barHeight = (int) (scrollPos * getHeight());
                    //Log.e("fly", scrollPos+", "+ barHeight);
                    mBarRect.left = getWidth() - mRightPadding - getVerticalScrollbarWidth();
                    mBarRect.right = getWidth() - mRightPadding;
                    mBarRect.top = (int) (getScrollY() * scrollPos);
                    mBarRect.bottom = mBarRect.top + barHeight;
                    //Dbg.print(mBarRect.left, mBarRect.right, mBarRect.top, mBarRect.bottom, dx, dy);
                    if (dx >= mBarRect.left - mScrollExWidth
                            && dx < mBarRect.right
                            && dy >= mBarRect.top - mScrollExHeight
                            && dy < mBarRect.bottom + mScrollExHeight) {
                        //Log.e("fly", "mScrollStart");
                        mScrollStart = true;
                    }
                }
                break;
            case MotionEvent.ACTION_MOVE:
                if (mScrollStart) {
                    int offsetY = (int) ev.getY() - dy;
                    //Log.e("fly", "move: " + ev.getY());
                    int top = mBarRect.top + offsetY;
                    float scrollPos = (float) top / getHeight();
                    int scrollY = (int) (scrollPos * getChildView().getHeight());
                    if (scrollY < 0) {
                        scrollY = 0;
                    }
                    if (scrollY > getChildView().getHeight() - getHeight()) {
                        scrollY = getChildView().getHeight() - getHeight();
                    }
                    setScrollY(scrollY);
                    return true;
                }
                break;
        }
        return super.dispatchTouchEvent(ev);
    }
 
    private boolean canScroll() {
        View child = getChildView();
        if (child != null && child.getHeight() > getHeight()) {
            return true;
        } else {
            return false;
        }
    }
 
    private View getChildView() {
        if (getChildCount() > 0) {
            return getChildAt(0);
        } else {
            return null;
        }
    }
 
    private int dip2px(float dpValue) {
        final float scale = getContext().getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }
 
    
    public void setRightPadding(int mRightPadding) {
        this.mRightPadding = mRightPadding;
    }
}

布局中设置了大滚动条样式,滚动时更加明显:


<com.zwxuf.apkparserdemo.FastScrollView
	Android:id="@+id/mScrollView"
	android:layout_width="0dp"
	android:layout_weight="1"
	android:scrollbarSize="10dp" 
	android:paddingRight="10dp"
	android:scrollbarThumbVertical="@drawable/fast_scroll_thumb_drawable"
	android:layout_height="match_parent">
 
	<HorizontalScrollView
		android:layout_width="match_parent"
		android:layout_height="match_parent" >
 
		<EditText
			android:id="@+id/et_xml"
			android:layout_width="wrap_content"
			android:layout_height="wrap_content"
			android:background="@null"
			android:editable="false"
			android:textColor="#000000"
			android:textSize="10sp"
			android:typeface="monospace"/>
	</HorizontalScrollView>
 
</com.zwxuf.apkparserdemo.FastScrollView>

同理,可以依此制作快速滚动的 HorizontalScrollView。

到此这篇关于Android实现快速滚动FastScrollView的文章就介绍到这了,更多相关android滚动FastScrollView内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Android实现快速滚动FastScrollView效果

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

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

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

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

下载Word文档
猜你喜欢
  • Android实现快速滚动FastScrollView效果
    先看效果图: public class FastScrollView extends ScrollView { private Rect mBarRect = ne...
    99+
    2024-04-02
  • Android实现3D滚动效果
    先上效果图 下载链接http://down.51cto.com/data/1076318...
    99+
    2023-01-31
    效果 Android
  • Flutter实现Android滚动悬浮效果过程
    目录1、计算每个区块的高度2、实现分析-tabBar透明度渐变3、实现分析-app上下滚动触发tabBar4、实现分析-tabBar切换触发app滚动5、源码有以下几种效果 1、ta...
    99+
    2023-01-29
    Flutter滚动悬浮 Flutter滚动悬浮效果
  • Android Textview实现颜色渐变滚动效果
    本文实例为大家分享了Android颜色渐变滚动展示的具体代码,供大家参考,具体内容如下public class FlashTextView extends android.support.v7.widget.AppCompatTextVie...
    99+
    2023-05-30
    android textview 渐变
  • Android Flutter实现有趣的页面滚动效果
    目录CustomScrollView 简介改造原代码让导航栏更有趣改造后的代码其他效果总结在Flutter 高仿一个某支付价值几个亿的页面这一篇中,我们使用了 ListVi...
    99+
    2024-04-02
  • vue实现滑动和滚动效果
    本文实例为大家分享了vue实现滑动和滚动效果的具体代码,供大家参考,具体内容如下 面板滑动效果,父组件是resultPanel,子组件是resultOption,仿照了iview中,...
    99+
    2024-04-02
  • jQuery如何实现滚动效果
    这篇文章主要介绍了jQuery如何实现滚动效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 图片轮播:原理如下: 假设有三张图片,三张...
    99+
    2024-04-02
  • vue实现文字滚动效果
    本文实例为大家分享了vue实现文字滚动效果的具体代码,供大家参考,具体内容如下 项目需求:系统公告,要从右忘左循环播放的牛皮广告效果。 实现: 方案一:使用定时器和CSS3的过渡属性...
    99+
    2024-04-02
  • jquery实现全屏滚动效果
    本文实例为大家分享了jquery实现全屏滚动的具体代码,供大家参考,具体内容如下 效果图 思路 1.要全屏,给父级、body、html、高度设置为100%,自己的宽度也100%,...
    99+
    2024-04-02
  • JavaScript实现长图滚动效果
    本文实例为大家分享了JavaScript之长图滚动的具体代码,供大家参考,具体内容如下 长图的滚动会涉及定时器: 我们先来回顾下定时器: <!DOCTYPE html&g...
    99+
    2024-04-02
  • js实现楼层滚动效果
    本文实例为大家分享了jquery实现滑动楼梯效果,实现楼层的滚动以及点击楼层按钮跳转到对应的楼层,代码如下 html代码: <div style="height: 500p...
    99+
    2024-04-02
  • css如何实现滚动效果
    本篇内容主要讲解“css如何实现滚动效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“css如何实现滚动效果”吧!css通过overflow属性设置滚动条示例:<html><h...
    99+
    2023-07-04
  • Android用viewPager2实现UI界面翻页滚动的效果
    目录1.先在build.gradle(Module)下添加引用viewPager2的库2.在MainActivity下新建一个viewPager23.创建个ViewPagerAdap...
    99+
    2024-04-02
  • Android Flutter如何实现有趣的页面滚动效果
    本文小编为大家详细介绍“Android Flutter如何实现有趣的页面滚动效果”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android Flutter如何实现有趣的页面滚动效果”文章能帮助大家解决疑惑,下面跟着小...
    99+
    2023-07-02
  • Android中怎么使用ListView实现滚轮动画效果
    今天就跟大家聊聊有关Android中怎么使用ListView实现滚轮动画效果,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。   private ...
    99+
    2023-05-31
    android listview
  • 基于Android实现可滚动的环形菜单效果
    效果 首先看一下实现的效果: 可以看出,环形菜单的实现有点类似于滚轮效果,滚轮效果比较常见,比如在设置时间的时候就经常会用到滚轮的效果。那么其实通过环形菜单的表现可以将其看作是一个...
    99+
    2024-04-02
  • js实现文字滚动的效果
    本文实例为大家分享了js实现文字滚动的效果的具体代码,供大家参考,具体内容如下 在之前小编已经和大家介绍了一些常用的js动画效果,在此,和大家介绍一种可能不太常用的动画效果。该动画效...
    99+
    2024-04-02
  • Angular实现表格自滚动效果
    目录表格自滚动效果图实现原理具体实现:表格自滚动效果图 实现原理 原理:每一次的滚动都是在其setInterval()定时器的作用下,每次将DOM.scrollTop++ 具体实现...
    99+
    2024-04-02
  • vue实现3D切换滚动效果
    本文实例为大家分享了vue实现3D切换滚动效果的具体代码,供大家参考,具体内容如下 今天写项目,遇到一个点击切换的滚动需求,贴出来,做一个记录 这个是最终的一个效果,点击左右小箭头...
    99+
    2024-04-02
  • 怎么用css实现滚动效果
    使用css实现滚动效果的方法:1.通过“overflow”属性设置滚动条使网页元素的内容实现滚动效果,在css中添加样式代码,比如语法样式为:“overflow: scroll;”设置滚动条即可。css通过overflow属性设置滚动条示例...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作