ScrollView 滚动视图
滚动视图是指当前拥有很多内容,屏幕显示不完整时,需要通过滚动来显示完整的视图。
-----------------------------
ScrollBar分两种:
HorizontalScrollView: 水平滚动视图
ScrollView: 垂直滚动视图
-----------------------------
隐藏滚动条有两种方式:
一种是在标签中设置: android:scrollbars="none"
另一种是在代码中设置:
setHorizontalScrollBarEnable(false); 隐藏横向ScrollView
setVerticalScrollBarEnable(false); 隐藏纵向ScrollView
switch (event.getAction()){case MotionEvent.ACTION_MOVE:/*** 1.getScrollY()----滚动条滑动的距离* 2.getMeasuredHeight()* 3.getHeight()*///顶部状态if(scrollView.getScrollY()<=0){Log.i("Main","顶部");}//底部状态//scrollView.getChild(0) 表示 scrollView的第一个子View,这里就是TextView。//TextView的总高度=屏幕的高度+滚动条的最大滑动距离//这里的条件是TextView的总高度<=屏幕的高度+滚动条的滑动距离,一旦达成条件,就说明滚动条已经达到最大距离,也就是到底了。if(scrollView.getChildAt(0).getMeasuredHeight()<=scrollView.getHeight()+scrollView.getScrollY()){Log.i("Main","滑动到底部");Log.i("Main","scrollView.getChildAt(0).getMeasuredHeight()="+scrollView.getChildAt(0).getMeasuredHeight()+" scrollView.getHeight()="+scrollView.getHeight()+
"scrollView.getScrollY()="+scrollView.getScrollY());textView.append(getResources().getString(R.string.content2));}break;
ScrollView的监听器——setOnTouchLiatener的使用
应用案例:判断 ScrollView 何时滑动到底部
类似于 ListView的下拉更新,但这里使用的是 TextView+ScrollView。
监听事件中含有 onTouch()方法,和上一章的 Flipper的 onTouchEvent类似。
-----------------------------------
getScrollY()----滚动条滑动的距离
getMeasuredHeight() 视图的真实高度(隐藏部分+显示部分)
getHeight() 视图显示部分的高度
--------------------------------------
摘自评论区:
<ScrollView>里边只能有一个元素,如果使用多个元素,需要把元素都放在<LinearLayout>等布局标签中,然后把布局标签在放在<ScrollView>否则放多个元素会报错。
--------------------------------------
摘自评论区:
那个滚动到底部或顶部的判断,放在MotionEvent.ACTION_MOVE不合适,那里会执行很多次操作;放在MotionEvent.ACTION_UP比较适合,手指松开再去执行。
scrollTo 和 scrollBy区别
scrollTo: 相对于滚动视图的起始位置,去滚动相应的距离,所以只能滑动一次。
scrollBy: 相对于当前位置,去滚动相应的距离,每滚动一次就会更新当前位置,所以能不断滚动。
scrollBy的源码:
public void scrollBy(int x,int y){scrollTo(mScrollX + x , mScrollY + y);
}
其中,mScrollX 和 mScrollY 表示当前坐标。
----------------------------------
应用案例:控制ScrollView视图的位置
实际案例:小说阅读,想要回到上次看的地方,如果采取手势滑动,要不停地滑,会比较麻烦,而现在采取按钮的方式代替手势滑动,可以直接定位到你上次浏览的地方,实现方法是记录上一次退出的位置,下次浏览时使用 scrollTo 或者 scrollBy  去恢复到上次浏览到的位置。
-------------------------------------
通过按钮滑动视图的步骤
1. 在 main.xml 中添加两个 Button,分别表示向上和向下(这里是垂直的ScrollView)。
2. 在 MainActivity中初始化这两个Button。令 MainActivity 实现接口 OnClickListener。
3. 对两个按钮设置监听器。
4. 重写 onClick():
(1)使用switch,通过view.getId()判断是哪个按钮点击。
(2)使用 scrollTo(int x,int y) 或者 scrollBy(int x,int y)实现滑动。
 1 // ScrollView嵌套TextView,实现滚动条 滚动效果
 2 //实现监听,对顶部和底部的判断
 3 //控制滚动条滚动的位置,向上滚动或者向下滚动指定距离
 4 public class MainActivity extends Activity implements OnClickListener {
 5     private TextView textView;
 6     private ScrollView scrollView;
 7     private Button up, down;
 8
 9     @Override
10     protected void onCreate(Bundle savedInstanceState) {
11         super.onCreate(savedInstanceState);
12         setContentView(R.layout.main);
13         up = (Button) findViewById(R.id.up);
14         down = (Button) findViewById(R.id.down);
15         up.setOnClickListener(this);
16         down.setOnClickListener(this);
17         textView = (TextView) findViewById(R.id.content);
18         textView.setText(getResources().getString(R.string.content));
19         scrollView = (ScrollView) findViewById(R.id.scrollview1);
20         //实现监听
21         scrollView.setOnTouchListener(new OnTouchListener() {
22
23             @Override
24             public boolean onTouch(View v, MotionEvent event) {
25                 // TODO Auto-generated method stub
26                 switch (event.getAction()) {
27                 case MotionEvent.ACTION_UP: {break;}
28                 case MotionEvent.ACTION_DOWN: {break;}
29                 case MotionEvent.ACTION_MOVE: {
30                     // 1.getScrollY()滚动条滑动的距离
31                     // 2.getMeasureHeight() 总的长度
32                     // 3.getHeight()一屏的内容高度
33
34                     // 顶部状态
35                     if (scrollView.getScrollY() <= 0) {
36                         Log.i("main", "滑动到顶部");
37                     }
38                     // 底部状态
39                     // textview的总高度《=屏幕高度+滚动条的滚动距离
40                     if (scrollView.getChildAt(0).getMeasuredHeight() <= scrollView
41                             .getHeight() + scrollView.getScrollY()) {
42                         Log.i("main", "滑动到底部咯");
43                         //继续添加数据
44                         textView.append(getResources().getString(
45                                 R.string.content));
46                     }
47                     break;
48                 }
49
50                 }
51                 return false;
52             }
53         });
54
55     }
56   //控制滚动条滚动的位置
57     @Override
58     public void onClick(View v) {
59         // TODO Auto-generated method stub
60         switch (v.getId()) {
61         // scrollView.scrollTo 以滚动视图起始位置计算
62         // scrollView.scrollBy 相对前一次位置滚动对应的距离
63         case R.id.up: {
64             scrollView.scrollTo(0, -30);
65             break;
66         }
67         case R.id.down: {
68             scrollView.scrollBy(0, 30);
69             break;
70         }
71         }
72     }
73
74 }


转载于:https://www.cnblogs.com/my334420/p/6715556.html

Android攻城狮ScrollView相关推荐

  1. 写给即将/正在找工作的Android攻城狮

    写给即将/正在找工作的Android攻城狮 版权声明:转载必须注明本文转自严振杰的博客:http://blog.yanzhenjie.com 这段时间从北上广深杭不断传来一两个月找不到工作的消息,我一 ...

  2. Android攻城狮ListView

    适配器: 数据适配器:把复杂的数据填充在指定的视图界面上ArrayAdapter 数组适配器 用于绑定格式单一的数据 数据源:可以是集合或数组 SimpleAdapter 简单适配器:用于绑定格式复杂 ...

  3. Android攻城狮Gallery和ImageSwitcher制作图片浏览器

    使用Gallery 和 ImageSwitcher 制作图片浏览器 Gallery介绍 我们有时候在手机上或者PC上看到动态的图片,可以通过鼠标或者手指触摸来移动它,产生动态的图片滚动效果,还可以根据 ...

  4. Android攻城狮GestureDetector和GestureOverlayView

    手势识别 可以通过以下两种方式实现: 1. 使用GestureDetector 2. 使用GestureOverlayView(属于线程的控件)手势交互过程(原理): 1. 触屏一刹那,触发 Moti ...

  5. Android攻城狮fragment

    1 //1,fragment静态加载:MainActivity MainActivty1_2 Myfragment1 2 //2,fragment动态加载 :MainActivity Myfragme ...

  6. Android攻城狮ViewFlipper

    使用ViewFlipper实现屏幕切换动画效果. ViewFlipper和ViewPager一样,都是Android自带的一个多页面管理控件,不同的是ViewPager是手动切换页面,而ViewFli ...

  7. Android攻城狮数据存储之SharedPreferences

    Android的四种数据存储方式: 1. SharedPreferences 2. SQLite 3. Content Provider 4. File --------------------- S ...

  8. Android攻城狮认识ContextMenu

    什么是ContextMenu? 例如Windows系统的右键菜单,在Android中长按某个文件夹,会跳出菜单,这个菜单就是ContextMenu. ContextMenu与OptionMenu的区别 ...

  9. Android攻城狮OptionsMenu

    Android的菜单一共有三种: OptionsMenu 选择菜单 ContextMenu 上下文菜单 SubMenu 子菜单创建选项菜单: 在 Activity 里面重写 onCreateOptio ...

最新文章

  1. C# winform版 nbtstat
  2. CentOS下防御或减轻DDoS攻击方法(转)
  3. Apache 配置虚拟目录、主机的疑惑及解决
  4. [HNOI2012]矿场搭建
  5. 相对熵与交叉熵_详解机器学习中的熵、条件熵、相对熵、交叉熵
  6. C语言 const 修饰指针 - C语言零基础入门教程
  7. ssh框架常见错误与解决方法
  8. PHP中mysql如何添加记录_PHP向MySql提交数据添加记录的简单代码_PHP教程
  9. fastjson 检测json格式_FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换...
  10. spark sql 查看分区_Spark SQL解析查询parquet格式Hive表获取分区字段和查询条件
  11. PAT编程:A除以B (20)——C语言
  12. Scality试图将对象存储转移到磁带和云中
  13. Python虚拟机之if控制流(一)
  14. JUC与JVM并发编程学习笔记01
  15. 使用Tasker和企业微信实现在安卓手机自动转发短信至微信
  16. 金蝶——“免、抵、退”税操作说明及帐务处理
  17. 怎样使表格中的数字自动计算机,#怎样让一个表格自动加或乘#如何使excel表格里多个数同时除以1000?...
  18. android自定义矩形框,Android 中自定义长方形
  19. 关于python中matplotib.pyplot中cm的介紹
  20. 比利时研制全息图像电视 可取代现有3D技术

热门文章

  1. 怎么用matlab画心形曲线方程,matlab画心形曲线
  2. Android中对静态壁纸和动态壁纸原理深入理解
  3. UE4 解决半透明材质显示错误
  4. BCJC:62:计算机体系之灵魂→OS→目标文件
  5. 网络字节序与主机字节序的相互转换
  6. Android 仿微信通讯录
  7. 密评(商用密码应用安全性评估)
  8. 固态硬盘对于linux提升,固态硬盘在Linux系统下提升使用率妙方
  9. 工业企业产值产量电子台账操作指南(第一版)
  10. BLDC无刷电机驱动板,foc驱动板,有霍尔接口,反电动势接口,三相电流采集接口