iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android Scroller的使用方法
  • 978
分享到

Android Scroller的使用方法

2024-04-02 19:04:59 978人浏览 安东尼
摘要

本文实例为大家分享了Android Scroller的使用方法,供大家参考,具体内容如下 1、scrollTo和ScrollBy View类定义了两个用于滚动View内容的方法:sc

本文实例为大家分享了Android Scroller的使用方法,供大家参考,具体内容如下

1、scrollTo和ScrollBy

View类定义了两个用于滚动View内容的方法:scrollTo和scrollBy:



public void scrollTo(int x, int y) {
    if (mScrollX != x || mScrollY != y) {
        int oldX = mScrollX;
        int oldY = mScrollY;
        mScrollX = x;
        mScrollY = y;
        invalidateParentCaches();
        onScrollChanged(mScrollX, mScrollY, oldX, oldY);
        if (!awakenScrollBars()) {
            postInvalidateOnAnimation();
        }
    }
}


public void scrollBy(int x, int y) {
    scrollTo(mScrollX + x, mScrollY + y);
}

可以看到scrollBy传入的x和y参数实际上是X方向和Y方向的滚动距离的增量,最终还是调用了scrollTo方法。而scrollTo方法中做了一些刷新和通知操作,最重要的是对mScrollX和mScrollY进行了赋值。

在View的draw方法中,我们可以看到如下代码:


int sx = 0;
int sy = 0;
if (!drawingWithRendernode) {
    computeScroll();
    sx = mScrollX;
    sy = mScrollY;
}

...

if (offsetForScroll) {
    canvas.translate(mLeft - sx, mTop - sy);
}

也就是说,mScrollX和mScrollY最终是用在了内容绘制的地方,其mLeft和mTop本身都没有因为scrollTo发生变化。scrollTo作用在View的内容上,而不是View本身。

2、 computeScroll

在上面的View的draw方法的节选中我们看到在对mScrollX和mScrollY取值之前,调用了computeScroll方法。computeScroll方法声明如下:



public void computeScroll() {
}

根据注释,computeScroll的典型用法是与Scroller结合使用实现内容/字节点的滚动动画。

3、Scroller的使用

Scroller事实上并不直接操作View的滚动,而是根据设置来计算当前X和Y方向的距离。Scroller的一般使用步骤:

1、初始化Scroller,可以指定插值器,不指定则使用默认的ViscousFluidInterpolator
2、调用Scroller#startScroll方法,开始在一段时间内不断计算X和Y方向的滚动
3、通知View刷新
4、在View#computeScroll中通过scrollTo实现真正的滚动操作
5、通知View刷新

其中在滚动执行完成之前4和5会不断地循环,直至scroller.computeScrollOffset()返回false。


class ScrollableLinearLayout @JVMOverloads constructor(
    context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : LinearLayout(context, attrs, defStyleAttr) {
    private val scroller = Scroller(context, BounceInterpolator())

    override fun computeScroll() {
        if(scroller.computeScrollOffset()) {
            // 真正实现滚动操作的地方
            scrollTo(scroller.currX, scroller.currY)

            // 刷新
            invalidate()
        }
    }

    fun scroll() {
        // 调用Scroller的startScroll
        if(scrollX == 0) {
            scroller.startScroll(scrollX, scrollY,  -500,  0,  300)
        } else {
            scroller.startScroll(scrollX, scrollY, 500, 0, 300)
        }

        // 刷新
        invalidate()
    }

}

xml布局:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="Http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".scroller.activity.ScrollerSampleActivity">

    <com.sahooz.customviewdemo.scroller.view.ScrollableLinearLayout
        android:id="@+id/sll"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:gravity="center_vertical"
        android:orientation="vertical"
        android:background="#FFAAAA">

        <Button
            android:id="@+id/btnScroll"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Scroll" />

    </com.sahooz.customviewdemo.scroller.view.ScrollableLinearLayout>

</LinearLayout>

Activity


class ScrollerSampleActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_scroller_sample)

        val btnScroll = findViewById<Button>(R.id.btnScroll)
        btnScroll.setOnClickListener {
            findViewById<ScrollableLinearLayout>(R.id.sll).scroll()
        }
    }
}

运行结果:

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

--结束END--

本文标题: Android Scroller的使用方法

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

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

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

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

下载Word文档
猜你喜欢
  • Android Scroller的使用方法
    本文实例为大家分享了Android Scroller的使用方法,供大家参考,具体内容如下 1、scrollTo和ScrollBy View类定义了两个用于滚动View内容的方法:sc...
    99+
    2024-04-02
  • Android中使用TextToSpeech的方法
    前言 在一年前,和朋友一起码了一个英语APP,仿照某APP实现了单词的功能,最开始就是借助的TextToSpeech,后面感觉声音不够好听,于是使用了第三方 APP初稿如图: 实现...
    99+
    2024-04-02
  • Android中ImageView的使用方法
    Android中ImageView的使用:点击按钮,改变图片透明度,切换图片 布局是三个按钮组件和一个ImageView组件 <?xml version="1.0"...
    99+
    2024-04-02
  • Android如何使用Scroller实现一个可向上滑动的底部导航栏
    这篇文章主要介绍了Android如何使用Scroller实现一个可向上滑动的底部导航栏,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。看下效果:首先这个控件是滑动的肯定就会用到...
    99+
    2023-05-31
    android
  • Android onCreateOptionsMenu的使用方法总结
    Android onCreateOptionsMenu的使用方法总结任何一款软件都少不了对“菜单”的使用。在Android下,每一个activity都捆绑了一个Menu,要想定义和使用菜单,都必须在Activity下进行操作,复写onCre...
    99+
    2023-05-30
    android oncreateoptionsmenu roi
  • Android 通知栏的使用方法
    目录一、设置通知内容二、创建渠道三、设置通知栏的点击操作四、显示通知一、设置通知内容 //CHANNEL_ID,渠道ID,Android 8.0及更高版本必须要设置 N...
    99+
    2024-04-02
  • Android简单使用PopupWindow的方法
    本文实例为大家分享了Android简单使用PopupWindow的的具体代码,供大家参考,具体内容如下 思路 1.在res下面创建一个menu文件夹,并新建一个xml文件作为Poup...
    99+
    2024-04-02
  • android定时器的使用方法
    在Android中,可以使用`CountDownTimer`类来创建和使用定时器。以下是使用`CountDownTimer`类的步骤...
    99+
    2023-08-28
    android
  • Android 中ImageView的ScaleType使用方法
    Android 中ImageView的ScaleType使用方法ImageView的ScaleType属性,表示的是ImageView中资源图片的填充方式。scaleType的属性值有好几种,分别是: matrix(默认) center...
    99+
    2023-05-30
    android imageview scaletype
  • Android UI中TextView的使用方法
    Android UI中TextView的使用方法一、TextView不同区域设置颜色,大小、点击事件String msg = getResources().getString(R.string.school_roll_auth); ...
    99+
    2023-05-30
    android textview roi
  • Android WebView的使用方法总结
     Android WebView的使用方法  Android app打开H5页一般要实现如下需求:打开指定url网页;2、点击链接可以跳转到下一页,并更新标题;3、按back键或左箭头可以返回上一页;4、当webview...
    99+
    2023-05-30
    android webview roi
  • Android控件RadioButton的使用方法
    本文实例为大家分享了Android控件RadioButton的使用代码,供大家参考,具体内容如下 内容 <?xml version="1.0" encoding=...
    99+
    2024-04-02
  • Android ijkplayer的使用方法解析
    ijkplayer是Bilibili基于ffmpeg开发并开源的轻量级视频播放器,支持播放本地网络视频,也支持流媒体播放。支持Android&iOS。ijkplayer的编译这里不多阐述,我也是直接获取别人编译完成的so库文件,直接...
    99+
    2023-05-30
    android ijkplayer roi
  • Android串口使用方法
    目录 前言  一、环境介绍 二、设备介绍 二、方法一: 1.引入库        2.编写代码 三、方法二: 1.引入库        2.编写代码 四、完整代码: 五、源码: 前言 串口是一种用于android对硬件设备通信的一种...
    99+
    2023-09-01
    android java 信息与通信 物联网 iot
  • Android之Activity使用方法
    【Activity】 一个Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务,例如拨号、拍照、发送email、看地图。每一个activity被给予一个窗口,在上面可以绘...
    99+
    2023-10-08
    android java 开发语言
  • Dialog中Android应用中的使用方法
    Dialog中Android应用中的使用方法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Android开发中最常用的就是Dialog类,除了自定义dialog...
    99+
    2023-05-31
    android dialog roi
  • Android 中RxPermissions 的使用方法详解
    Android 中RxPermissions 的使用方法详解以请求拍照、读取位置权限为例module的build.gradle: compile 'com.tbruyelle.rxpermissions2:rxpermissions:0....
    99+
    2023-05-30
    android rxpermissions mi
  • Android 中Context的使用方法详解
    Android 中Context的使用方法详解概要:Context字面意思是上下文,位于framework package的android.content.Context中,其实该类为LONG型,类似Win32中的Handle句柄。很多方法...
    99+
    2023-05-30
    android context roi
  • Android MaterialCardView的使用方法是什么
    本篇内容介绍了“Android MaterialCardView的使用方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!演示xml布局...
    99+
    2023-06-25
  • Android ExpandableListView的使用方法是什么
    Android ExpandableListView是一个可展开的列表视图,可以显示多级列表数据。以下是使用ExpandableLi...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作