记录Android开发中使用HorizontalScrollView的坑

来源:互联网 发布:淘宝招聘官网首页 编辑:程序博客网 时间:2024/05/01 06:25

前言

对于Android中的HorizontalScrollView控件,第一感觉是不怎么熟悉的,在以往的项目开发基本没有使用到. 横向的滚动布局也可以使用RecyclerView控件,所以HorizontalScrollView的使用频率确实不高. 最近开发的功能点需要使用到横向滚动的布局,往横向滚动的布局中添加图片,所以就打算使用HorizontalScrollView控件,这样也可以对其有一定的了解.

之所以写这篇文章不是总结HorizontalScrollView控件的,官方文档或者大牛都有翻译的文章,都可以了解得非常透彻,这篇文章主要还是记录开发中遇到的坑,简单做个记录,挖坑埋坑.

似坑非坑

使用的场景

HorizontalScrollView布局嵌套一个横向的线性布局,动态添加ImageView控件(布局参数已设置)到横向线性布局,当HorizontalScrollView的内容超过屏幕的宽度之后,再让视图滚动到最右边;

出现的问题:

每次添加ImageView后,只滚动到倒数第二个的ImageView控件,而不滚动到最后那个刚添加的ImageView控件。当HorizontalScrollView的内容超过屏幕的宽度之后,再添加ImageView控件,就会使得每次最后的ImageView控件不被显示;

缘由

当向HorizontalScrollView添加完ImageView(也就是addView)之后,不会立马就显示,而是在队列中等待处理,虽然很快就会显示,但是如果立即使视图滚动到最右边(调用其api为fullScroll), 这时候view可能还没有显示出来,所以就出现只滚动到倒数第二的ImageView控件,应该通过handler在新线程中更新

这里参考自文章:http://blog.csdn.net/t12x3456/article/details/12799825

解决方法

mHsvContainer.postDelayed(new Runnable() {     @Override     public void run() {        mHsvContainer.fullScroll(HorizontalScrollView.FOCUS_RIGHT);//主线程     }},100);/**或者下面定时器延迟*/Timer timer=new Timer();timer.schedule(new TimerTask() {        @Override        public void run() {               mHsvContainer.fullScroll(HorizontalScrollView.FOCUS_RIGHT);        }},100L);

思路:动态添加子View之后,通过延时100毫秒左右,再让HorizontalScrollView滚动,就可以使得HorizontalScrollView滚动到最右边

其它

上面让HorizontalScrollView滚动到最右边,使用的api是fullScroll(int direction),参数direction是指定滚动的方向.之前开发使用ScrollView时也有用到这个api,是指定ScrollView向底部滚动.api的使用还是非常简单而且简洁的.在让其视图滚动这个功能中也尝试了其它两个api,分别是arrowScroll和pageScroll,作用大致相同.

public boolean fullScroll (int direction)

处理按下”home/end”快捷键之后的滚动相应,参数是指定其滚动的方向,滚动同时会将焦点赋予移动后可视的最左或最右的组件.


public boolean arrowScroll (int direction)

响应点击左右箭头时对滚动条的处理,参数是指定其滚动的方向.


public boolean pageScroll (int direction)

处理按下”page up/down”快捷键之后的滚动响应,参数是指定其滚动的方向,此方法会将视图往左或往右滚动一个页面的距离,同时将焦点赋予移动后可视的最左或最右的组件.

关于HorizontalScrollView的讲解可参考 android HorizontalScrollView讲解

总结

  • 习惯了每篇文章的总结,这次就感叹几声:” 每天的事都做不完,日子还是一天天过,偶尔是挺迷茫的,想想那些美好的辛酸的,日子还是继续着过.”
0 0
原创粉丝点击