Android攻城狮ScrollView
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相关推荐
- 写给即将/正在找工作的Android攻城狮
写给即将/正在找工作的Android攻城狮 版权声明:转载必须注明本文转自严振杰的博客:http://blog.yanzhenjie.com 这段时间从北上广深杭不断传来一两个月找不到工作的消息,我一 ...
- Android攻城狮ListView
适配器: 数据适配器:把复杂的数据填充在指定的视图界面上ArrayAdapter 数组适配器 用于绑定格式单一的数据 数据源:可以是集合或数组 SimpleAdapter 简单适配器:用于绑定格式复杂 ...
- Android攻城狮Gallery和ImageSwitcher制作图片浏览器
使用Gallery 和 ImageSwitcher 制作图片浏览器 Gallery介绍 我们有时候在手机上或者PC上看到动态的图片,可以通过鼠标或者手指触摸来移动它,产生动态的图片滚动效果,还可以根据 ...
- Android攻城狮GestureDetector和GestureOverlayView
手势识别 可以通过以下两种方式实现: 1. 使用GestureDetector 2. 使用GestureOverlayView(属于线程的控件)手势交互过程(原理): 1. 触屏一刹那,触发 Moti ...
- Android攻城狮fragment
1 //1,fragment静态加载:MainActivity MainActivty1_2 Myfragment1 2 //2,fragment动态加载 :MainActivity Myfragme ...
- Android攻城狮ViewFlipper
使用ViewFlipper实现屏幕切换动画效果. ViewFlipper和ViewPager一样,都是Android自带的一个多页面管理控件,不同的是ViewPager是手动切换页面,而ViewFli ...
- Android攻城狮数据存储之SharedPreferences
Android的四种数据存储方式: 1. SharedPreferences 2. SQLite 3. Content Provider 4. File --------------------- S ...
- Android攻城狮认识ContextMenu
什么是ContextMenu? 例如Windows系统的右键菜单,在Android中长按某个文件夹,会跳出菜单,这个菜单就是ContextMenu. ContextMenu与OptionMenu的区别 ...
- Android攻城狮OptionsMenu
Android的菜单一共有三种: OptionsMenu 选择菜单 ContextMenu 上下文菜单 SubMenu 子菜单创建选项菜单: 在 Activity 里面重写 onCreateOptio ...
最新文章
- C# winform版 nbtstat
- CentOS下防御或减轻DDoS攻击方法(转)
- Apache 配置虚拟目录、主机的疑惑及解决
- [HNOI2012]矿场搭建
- 相对熵与交叉熵_详解机器学习中的熵、条件熵、相对熵、交叉熵
- C语言 const 修饰指针 - C语言零基础入门教程
- ssh框架常见错误与解决方法
- PHP中mysql如何添加记录_PHP向MySql提交数据添加记录的简单代码_PHP教程
- fastjson 检测json格式_FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换...
- spark sql 查看分区_Spark SQL解析查询parquet格式Hive表获取分区字段和查询条件
- PAT编程:A除以B (20)——C语言
- Scality试图将对象存储转移到磁带和云中
- Python虚拟机之if控制流(一)
- JUC与JVM并发编程学习笔记01
- 使用Tasker和企业微信实现在安卓手机自动转发短信至微信
- 金蝶——“免、抵、退”税操作说明及帐务处理
- 怎样使表格中的数字自动计算机,#怎样让一个表格自动加或乘#如何使excel表格里多个数同时除以1000?...
- android自定义矩形框,Android 中自定义长方形
- 关于python中matplotib.pyplot中cm的介紹
- 比利时研制全息图像电视 可取代现有3D技术