android中文api(85)——HorizontalScrollView

 

 

前言

  本章内容是android.widget.HorizontalScrollView,译为"横向滚动条",版本为Android 2.3 r1,翻译来自"Tina",感谢"Tina"为大家带来精彩的翻译稿 !期待你加入Android API 中文的翻译,联系我over140@gmail.com。

 

声明

  欢迎转载,但请保留文章原始出处:)

    博客园:http://www.cnblogs.com/

    Android中文翻译组:http://goo.gl/6vJQl

 

正文

  一、结构

public class HorizontalScrollView extends FrameLayout

        

java.lang.Object

android.view.View

         android.view.ViewGroup

                   android.widget.FrameLayout

                            android.widget.HorizontalScrollView

 

  二、概述

      

  用于布局的容器,可以放置让用户使用滚动条查看的视图层次结构,允许视图结构比手机的屏幕大。HorizontalScrollView是一种FrameLayout(框架布局),其子项被滚动查看时是整体移动的,并且子项本身可以是一个有复杂层次结构的布局管理器。一个常见的应用是子项在水平方向中,用户可以滚动显示顶层水平排列的子项(items)

  HorizontalScrollView不可以和ListView同时用,因为ListView有自己的滚动条设置。最重要的是,如果在需要显示很大的list的情况下,两者同时用则会使ListView在一些重要的优化上失效。出现这种失效的原因在于,HorizontalScrollView会强迫ListViewHorizontalScrollView本身提供的空间容器(infinite container)来显示完整的列表。

   类似的情况,TextView也有自己的滚动条,所以不需要ScrollView。但这两者是可以同时使用的,使用的结果会是在一个更大的容器里显示文本视图。

    HorizontalScrollView只支持水平方向的滚动显示。

 

  三、公共方法

public void addView (View child)

添加一个子视图。若这个子视图没有被设置布局参数,则使用ViewGroup的缺省参数。

参数

child         要添加的子视图

 

public void addView (View child, int index)

添加一个子视图。若这个子视图没有被设置布局参数,则使用ViewGroup的缺省参数。

参数

child         要添加的子视图

index       子视图要加入的位置

 

public void addView (View child, int index, ViewGroup.LayoutParams params)

添加一个带有指定布局参数的子视图。

参数

child         要添加的子视图

index       子视图要加入的位置

params  子视图的布局参数

 

public void addView (View child, ViewGroup.LayoutParams params)

添加一个带有指定布局参数的子视图。

参数

child         要添加的子视图

params  子视图的布局参数

 

public boolean arrowScroll (int direction)

响应点击左右箭头时对滚动条的处理。

参数

direction          The direction corresponding to the arrow key that was pressed箭头按键所表示的方向

返回值

             若此事件成功完成,则返回true;否则返回false

 

public void computeScroll ()

被父视图调用,用于必要时候对其子视图的值(mScrollXmScrollY)进行更新。典型的情况如:父视图中某个子视图使用一个Scroller对象来实现滚动操作,会使得此方法被调用。

 

public boolean dispatchKeyEvent (KeyEvent event)

按照可以获得焦点的顺序(从视图树的顶端到当前获得焦点的视图),分派一个按键事件给下一个视图。若此视图为焦点视图,事件将会分派给它自己。否则它将按照顺序,分派给下一个节点。此方法同时触动所有按键监听器。

参数

event       被分派的事件.

返回值

             若事件被处理,则返回true;否则为false

 

public void draw (Canvas canvas)

手动绘制视图(及其子视图)到指定的画布(Canvas)。这个视图必须在调用这个函数之前做好了整体布局。。当实现一个视图时,不需要继承这个方法;相反,你应该实现onDraw(Canvas)方法。

参数

canvas    绘制视图的画布

 

public boolean executeKeyEvent (KeyEvent event)

需要通过按键事件来实现滚动操作时,可以调用此方法。效果类似于由视图树型结构分派事件。

参数

event       需要执行的事件

返回值

             若事件被处理,则返回true;否则为false

 

public void fling (int velocityX)

滚动视图的fling手势。

参数

velocityX          方向的初始速率。正值表示手指/光标向屏幕右边滑动,而内容相对向左滚动。

 

public boolean fullScroll (int direction)

处理按下"home/end"快捷键之后的滚动响应。此方法会将视图移左或移右,同时将焦点赋予移动后可视的最左或最右的组件。如果没有任何组件适合得到焦点,此scrollview将收回焦点。

参数

direction          滚动方向:FOCUS_LEFT表示向视图的左边移动,FOCUS_RIGHT表示向视图的右边移动

返回值

             若此方法消耗(consumed)了按键事件则返回true,否则返回false

 

public int getMaxScrollAmount ()

返回值

             按左右箭头时视图可以滚动的最大值。

 

public boolean isFillViewport ()

表示此ScrollView的内容是否被拉伸以适应视口(viewport)的大小。

返回值

             若内容填充了视口则返回true,否则返回false

 

public boolean isSmoothScrollingEnabled ()

返回值

             按箭头方向滚动时,是否显示滚动的平滑效果。

 

public boolean onInterceptTouchEvent (MotionEvent ev)

使用此方法可以拦截所有触摸屏动作引发的事件。这意味着你可以监视分派给子项的事件,并且可以拿到任何当前手势的所有权。

使用此方法需谨慎。因为它与View.onTouchEvent(MotionEvent)有相当复杂的交互影响。这两者都必须同时正确地实现。事件将按以下顺序来被方法接收:

   1. 接收到down事件

   2. 事件将被视图组的一个子视图处理,或者被传递给自己的onTouchEvent()方法处理;这意味着你必须实现onTouchEvent(),并且返回true,这样才可以接着接受到其他的手势(而不是寻求一个父视图来处理它)。onTouchEvent()返回true后,你将不再接受到onInterceptTouchEvent()的任何事件,同时所有对触摸动作的处理必须像往常一样在onTouchEvent()中进行。

   3. 如果返回false,则接下来的每个事件(所有的up事件,包含最后一个up将会首先被传递到这里,然后到目标对象viewonTouchEvent()

   4. 如果返回ture,你将不会接收到以下任何事件:目标view将会接收到相同的事件,但是带着ACTION_CANCEL的动作。所有在此之后的事件将会被传递到你的onTouchEvent()方法中,并且不再在这里出现。

参数

ev    沿着树型结构往下分派的动作事件

         返回值

             若将动作事件从子视图中截获并通过onTouchEvent()将他们分派给当前ViewGroup,则返回true。当前目标将收到一个ACTION_CANCEL事件,并且不再会有其他消息被传递到这里。

 

public boolean onTouchEvent (MotionEvent ev)

此方法用于处理触摸屏的动作事件。

参数

ev    动作事件

         返回值

             若事件被成功处理,则返回true;否则返回false

 

public boolean pageScroll (int direction)

处理按下"page up/down"快捷键之后的滚动响应。此方法会将视图往左或往右滚动一个页面的距离,同时将焦点赋予移动后可视的最左或最右的组件。如果没有任何组件适合得到焦点,此scrollview将收回焦点。

参数

direction          滚动方向:FOCUS_LEFT表示向视图的左边移动一个页面FOCUS_RIGHT表示向视图的右边移动一个页面

      返回值

            若此方法处理(consumed)了按键事件则返回true,否则返回false

 

public void requestChildFocus (View child, View focused)

当父视图的一个子视图要获得焦点时,调用此方法。

参数

child         要获得焦点的子视图。此视图将包含焦点视图,但其本身不必为焦点。

focused  事实上拥有焦点的子视图的下层视图。

 

public boolean requestChildRectangleOnScreen (View child, Rect rectangle, boolean immediate)

当组里的某个子视图需要被定位在屏幕的某个矩形范围时,调用此方法。重载此方法的ViewGroup可确认以下几点:

    * 子项目将是组里的直系子项

    * 矩形将在子项目的坐标体系中

重载此方法的ViewGroup应该支持以下几点:

    * 若矩形已经是可见的,则没有东西会改变

    * 为使矩形区域全部可见,视图将可以被滚动显示

参数

child         发出请求的子视图

rectangle         子项目坐标系内的矩形,即此子项目希望在屏幕上的定位

immediate      设为true,则禁止动画和平滑移动滚动条

      返回值

            进行了滚动操作的这个组(group),是否处理此操作

 

public void requestLayout ()

当出现使视图布局失效的改变时,调用此方法。它将规划一个视图树的布局路径。

 

public void scrollTo (int x, int y)

设置视图滚动后的位置。这将引起onScrollChanged(int,int,int,int)的调用,同时使此视图失效。

此版本同时将滚动锁定于子视图的范围。

参数

x      要滚动到的x位置

y      要滚动到的y位置

 

public void setFillViewport (boolean fillViewport)

设置此滚动视图是否将内容宽度拉伸来适应视口(viewport)。

参数

fillViewport     设置为true表示将拉伸内容宽度;否则会设置为false

 

public void setOverScrollMode (int mode)

为视图设置over-scroll模式。有效的over-scroll模式有OVER_SCROLL_ALWAYS(缺省值),OVER_SCROLL_IF_CONTENT_SCROLLS(只允许当视图内容大过容器时,进行over-scrolling)和OVER_SCROLL_NEVER。只有当视图可以滚动时,此项设置才起作用。

参数

mode       视图的新over-scroll模式值

 

public void setSmoothScrollingEnabled (boolean smoothScrollingEnabled)

设置是否呈现按下箭头后的平滑滚动效果(动画效果)。

参数

smoothScrollingEnabled          设置是否呈现平滑滚动效果

 

public final void smoothScrollBy (int dx, int dy)

类似scrollBy(int, int),但是呈现平滑滚动,而非瞬间滚动(译者注:瞬间滚动——指不显示滚动过程,直接显示滚动后达到的位置)。

参数

dx    要滚动的X轴像素差值(译者注:横向像素差值)

dy    要滚动的Y轴像素差值(译者注:纵向像素差值)

 

public final void smoothScrollTo (int x, int y)

类似scrollTo(int, int),但是呈现平滑滚动,而不是瞬间滚动。

参数

x      滚动要到达位置的X轴值

      y      滚动要到达位置的Y轴值
 

  四、受保护方法

      protected int computeHorizontalScrollOffset ()

计算水平方向滚动条的滑块的偏移值。此值用来计算滚动时滑块的位置。

偏移值的范围可以以任何单位表示,但必须与computeHorizontalScrollRange()computeHorizontalScrollExtent()的单位一致。

缺省的偏移值为视图滚动的偏移差值。

       返回值

             滚动条滑块在水平方向上的偏移值

 

protected int computeHorizontalScrollRange ()

scroll view 的可滚动水平范围是所有子视图的宽度总合。

        返回值

              水平滚动条表示的全部水平滚动范围

 

protected int computeScrollDeltaToGetChildRectOnScreen (Rect rect)

计算X方向滚动的总合,以便在屏幕上显示子视图的完整矩形(或者,若矩形宽度超过屏幕宽度,至少要填满第一个屏幕大小)。

参数

rect          矩形

            返回值

              滚动差值

 

protected float getLeftFadingEdgeStrength ()

返回左渐变边缘的强度或密集度。强度的值介于0.0(无渐变)到1.0(全渐变)之间。缺省实现只返回0.01.0,而不返回中间值。子类必须重载次方法来给滚动动作提供更平滑的渐变过程。

        返回值

              左渐变的强度,即介于0.0f1.0f之间的浮点值

 

protected float getRightFadingEdgeStrength ()

返回右渐变边缘的强度或密集度。强度的值介于0.0(无渐变)到1.0(全渐变)之间。缺省实现只返回0.01.0,而不返回中间值。子类必须重载此方法来给滚动动作提供更平滑的渐变过程。

                   返回值

                       右渐变的强度,即介于0.0f1.0f之间的浮点值

 

protected void measureChild (View child, int parentWidthMeasureSpec, int parentHeightMeasureSpec)

要求子视图测量自身,需要将视图的MeasureSpec和其附加内容同时考虑在内。getChildMeasureSpec在其中承担了重要角色,它计算出MeasureSpec,并传递给子视图。

参数

child         要测量的子视图

parentWidthMeasureSpec     此视图的宽度要求

parentHeightMeasureSpec    此视图的高度要求

 

protected void measureChildWithMargins (View child, int parentWidthMeasureSpec, int widthUsed, int parentHeightMeasureSpec, int heightUsed)

要求子视图测量自身,需要将视图的MeasureSpec、附加内容和边缘部分同时考虑在内。子项必须有MarginLayoutParams(边缘布局参数)。getChildMeasureSpec在其中承担了重要角色,它计算出MeasureSpec,并传递给子视图。

参数

child         要测量的子视图

parentWidthMeasureSpec     此视图的宽度要求

widthUsed      被父视图(也可能是其他子视图)占用的横向额外空间

parentHeightMeasureSpec    此视图的高度要求

heightUsed     被父视图(也可能是其他子视图)占用的纵向额外空间

 

protected void onLayout (boolean changed, int l, int t, int r, int b)

当此视图要给每个子视图赋值大小和位置时,layout会调用此方法。子项的派生类应当重载此方法,并且调用各个子项的layout

参数

changed           此视图有新的大小或位置

l       左边界位置,相对于父视图

t      上边界位置,相对于父视图

r      右边界位置,相对于父视图

b      下边界位置,相对于父视图

 

protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)

调用此方法来确定本身和所包含内容的大小(宽度和高度)。此方法被measure(int,int)唤起,而且必须被子类重载以得到所包含内容的确切大小。

         注意:当重载此方法时,必须调用setMeasureDimension(int,int)来保存View的大小。如果没有做到,将会引发一个measure(int,int)抛出的IllegalStateException(非法状态错误)。超类onMeasure(int,int)可以被调用。

         编写基类的确认大小的方法,缺省情况下是根据其背景大小来确认,除非MeasureSepc允许有更大的高度或宽度。子类必须重载onMeasure(int,int)以得到对其内容大小的更准确的测量。

         若此方法被重载,它的子类需要确保其高度和宽度至少达到View所规定的最小值(可通过getSuggestedMinimumHeight()getSuggestedMinimumWidth()得到)。

参数

widthMeasureSpec         受上一层大小影响下的对水平空间的要求。可参看View.MeasureSpec

heightMeasureSpec        受上一层大小影响下的对垂直空间的要求。可参看View.MeasureSpec

 

protected void onOverScrolled (int scrollX, int scrollY, boolean clampedX, boolean clampedY)

overScrollBy(int, int, int, int, int, int, int, int, boolean)调用,来对一个over-scroll操作的结果进行响应。

参数

scrollX     新的X滚动像素值

scrollY     新的Y滚动像素值

clampedX        scrollXover-scroll的边界限制时,值为true

clampedY        scrollYover-scroll的边界限制时,值为true

 

protected boolean onRequestFocusInDescendants (int direction, Rect previouslyFocusedRect)

当在某个scroll view的子视图中寻找焦点时,需要小心不能让屏幕之外的组件得到焦点。这比缺省ViewGroup的实现代价更高,否则此行为被设为缺省。

参数

direction          值可以为FOCUS_UPFOCUS_DOWNFOCUS_LEFT FOCUS_RIGHT

previouslyFocusedRect 能够给出一个较好的提示的矩形(当前视图的坐标系统)表示焦点从哪里得来。如果没有提示则为null

返回值

             是否取到了焦点。

 

protected void onSizeChanged (int w, int h, int oldw, int oldh)

View的大小改变时此方法被调用。如果View是刚刚被加入,则视之前的值为0

参数

w     View的当前宽度

h      View的当前高度

oldw        View大小改变之前的宽度

oldh         View大小改变之前的高度

 

  五、补充

    文章精选

      Android HorizontalScrollview Example

 

结束

  这是"Tina"翻译的第二篇较长的译稿,上一篇为ListView,再次感谢她!!

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303810.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在 C# 中使用只读的 Collections

集合 表示一组可用于获取和存储的对象,在 C# 中提供了两种类型的集合。普通集合泛型集合前者存在于 System.Collections 命名空间下,属类型不安全的,后者存在于 System.Collections.Generic 命名空间下,属类型安全的。不可变对象 …

操作系统和数据库的知识梳理(思维导图)

使用思维导图工具 freemind 提供下载 源码文件和 Java网页版 http://files.cnblogs.com/facingwaller/osanddb.rar

令人难以理解的软件工程师:几千行代码能搞定的为什么要写几万行?

一我们公司的 Windows 版软体已经有十多年的历史,经过历代工程师的整治之后,内容已经凌乱不堪。过去三个月,我找时间自己重写了整个主程序。原本数万行的程序,被我重写的只剩下数千行,功能不变,效能更好&am…

如何从 dump 文件中提取出 C# 源代码?

一:背景 相信有很多朋友在遇到应用程序各种奇葩问题后,拿下来一个dump文件,辛辛苦苦分析了大半天,终于在某一个线程的调用栈上找到了一个可疑的方法,但 windbg 常常是以 汇编 的方式显示方法代码的,可惜的是…

谈谈对IOC及DI的理解与思考

一、前言在实际的开发过程中,我们经常会遇到这样的情况,在进行调试分析问题的时候,经常需要记录日志信息,这时可以采用输出到控制台。因此,我们通常会定义一个日志类,来实现输出日志。定义一个生成验证的逻…

终于有人把云计算、大数据和人工智能讲明白了!

今天跟大家讲讲云计算、大数据和人工智能。为什么讲这三个东西呢?因为这三个东西现在非常火,并且它们之间好像互相有关系:一般谈云计算的时候会提到大数据、谈人工智能的时候会提大数据、谈人工智能的时候会提云计算……感觉三者之间相辅相成…

聊一聊如何在.NET Core中使用Nacos 2.0

前言 随着 nacos 2.0.0 正式发布&#xff0c;老黄这边也跟着发布了 1.0.2 版本的 nacos-sdk-csharp。下面简单聊一下相关的使用。纯 SDK 的使用 首先要安装 nuget 包<PackageReference Include"nacos-sdk-csharp" Version"1.0.2" />这里有一点要注意…

听说你刚转了Java?准备转回.NET吧!

牛年跳槽季如火如荼&#xff0c;敏锐点的小伙伴儿应该都留意到了&#xff0c;BAT新年都在招聘.NET。2020年11月份发布.NET5统一了七大应用方向&#xff0c;.NET6的2个预览版已经把Blazor升级、跨平台UI方案MAUI、CLR性能优化等都放出来了&#xff0c;.NET前景充满想象&#xff…

一个人开始废掉的3种迹象

1作家李尚龙说&#xff1a;“在大城市里&#xff0c;搞废一个人的方式特别简单。给你一个安静狭小的空间&#xff0c;给你一根网线&#xff0c;最好再加一个外卖电话。好了&#xff0c;你开始废了。”之前的我并不相信人会这么轻易地堕落&#xff0c;直到身边出现了一个真实的例…

WPF 动态更换图片路径

wpf中动态修改图片路径&#xff0c;其实很简单&#xff0c;有个小伙伴有疑问&#xff0c;绑定了source,为什么不能显示图片呢。。。通过绑定&#xff0c;修改图片路径&#xff0c;动态显示图片&#xff0c;效果如下&#xff1a;图片支持本地路径和网络路径&#xff0c;下面就来…

听说你在学习算法?清华教授为你准备了一份独家秘籍!

也许您渴望进入国内外IT名企&#xff0c;却屡屡在算法类面试中折戟&#xff0c;苦恼不知如何破解困境&#xff1b;也许您是一位IT工程师&#xff0c;却因为算法能力不足而错过无数次的升职加薪&#xff0c;困扰不知如何突破瓶颈&#xff1b;也许您是一位大学生/中学生&#xff…

用VirtualWifi软件实现无线网卡同时连接多个AP。

2019独角兽企业重金招聘Python工程师标准>>> 用VirtualWifi软件实现无线网卡同时连接多个AP。 随着信息技术的发展&#xff0c;越来越多的人开始使用便捷的无线路由器&#xff08;AP&#xff09;组建家庭局域网。当你发现你周围有多个AP可以连接的时候&#xff0c;是…

机器学习萌新必学的Top10算法

导读&#xff1a;在机器学习领域里&#xff0c;不存在一种万能的算法可以完美解决所有问题&#xff0c;尤其是像预测建模的监督学习里。所以&#xff0c;针对你要解决的问题&#xff0c;最好是尝试多种不同的算法。并借一个测试集来评估不同算法之间的表现&#xff0c;最后选出…

分支结构程序案例c语言,C语言学习之三——分支结构程序

运算符优先级&#xff1a;如下所示&#xff1a;image.png关系运算符和表达式关系运算符定义&#xff1a;在程序中经常需要比较两个量的大小关系,以决定程序下一步的工作。因此使用关系运算符进行比较(注&#xff1a;比较后的返回值为boolean值&#xff0c;即0或1(真为1&#xf…

诺基亚首款Windows Phone智能手机将在年内推出

诺基亚高级官员星期日称&#xff0c;第一款采用微软Windows Phone操作系统的诺基亚智能手机的目标发布日期将在几天之内确定下来。诺基亚的目标是在将这种手机推向市场。诺基亚负责智能设备的执行副总裁乔哈洛&#xff08;Jo Harlow&#xff09;称&#xff0c;诺基亚和微软的技…

IOT必备之MQTT结构分析,不进来看看?【后附源码】

全网唯一物联网MQTT协议报文结构分析以及基于C#代码的报文组装实现介绍MQTT是一种基于TCP/IP协议的应用层协议&#xff0c;它规定了不同应用之间进行数据交换时的传送格式。既然是协议&#xff0c;理论上可以被任何开发语言实现它&#xff0c;以运行在任何平台&#xff0c;这个…

要成为年薪五十万的数据分析师,除了技术还需要什么?

超过59%企业&#xff0c;将提高数据分析岗位数量----一流的数据分析师&#xff0c;年薪轻松突破50万想必同学们看到这个数据并不惊讶&#xff0c;如今在中国&#xff0c;各行各业对数据分析岗位的需求日益提高&#xff1a;在线社交媒体&#xff0c;希望通过数据时刻洞察用户关注…

c语言电脑蓝屏代码,电脑蓝屏代码0x0000001a的解决方法

遇到蓝屏&#xff0c;第一时间记录停机码&#xff0c;如有导致蓝屏的文件名&#xff0c;那么排查的范围就会缩小。下面小编就为大家介绍电脑蓝屏代码0x0000001a的解决方法介绍&#xff0c;希望能对大家有所帮助&#xff01;方法/步骤1、先看这张截图的停机码所在位置。STOP后面…

关于序列建模,是时候抛弃RNN和LSTM了

作者表示&#xff1a;我们已经陷入 RNN、LSTM 和它们变体的坑中很多年&#xff0c;是时候抛弃它们了&#xff01;在 2014 年&#xff0c;RNN 和 LSTM 起死回生。我们都读过 Colah 的博客《Understanding LSTM Networks》和 Karpathy 的对 RNN 的颂歌《The Unreasonable Effecti…

如何运用并行编程Parallel提升任务执行效率

本文来自小易&#xff0c;【DoTNET技术圈】公众号已获得转载授权。《.NET并发变成实战》读后感&#xff1a;并行编程Parallel手打目录&#xff1a;一、前言二、任务并行库&#xff08;TPL&#xff09;的介绍三、Parallel.Invoke的使用四、Parallel.For的使用五、Parallel.ForEa…