ScrollView
在程序设计中,有时我们需要实现自动滚屏或根据选择直接滚动到指定的位置的功能。这里用到的主要组件就是滚动视图(ScrollView)。
----------
那么使用ScrollView如何实现布局自动滚动。
----------
首先我们要对控件对象进行声明;
- private LinearLayout linearLayout = null;
- private ScrollView scrollView = null;

private LinearLayout linearLayout = null;
private ScrollView scrollView = null;
然后通过控件的ID得到代表控件的对象;
- linearLayout = (LinearLayout) findViewById(R.id.linearLayout);
- scrollView = (ScrollView) findViewById(R.id.scrollView);

linearLayout = (LinearLayout) findViewById(R.id.linearLayout);
scrollView = (ScrollView) findViewById(R.id.scrollView);
定义一个Handler对象;
- private final Handler handler = new Handler();

private final Handler handler = new Handler();
实现滚动线程;
- private Runnable ScrollRunnable = new Runnable() {
- @Override
- public void run() {
- int off = linearLayout.getMeasuredHeight() - scrollView.getHeight();
- if (off > 0) {
- scrollView.scrollBy(0, 30);
- if (scrollView.getScrollY() == off) {
- Thread.currentThread().interrupt();
- } else {
- handler.postDelayed(this, 1000);
- }
- }
- }
- };

private Runnable ScrollRunnable = new Runnable() {
@Override
public void run() {
int off = linearLayout.getMeasuredHeight() - scrollView.getHeight();
if (off > 0) {
scrollView.scrollBy(0, 30);
if (scrollView.getScrollY() == off) {
Thread.currentThread().interrupt();
} else {
handler.postDelayed(this, 1000);
}
}
}
};
在自动滚动按钮上添加监听器;
- btnSelf.setOnClickListener(new btnSelfListener());

btnSelf.setOnClickListener(new btnSelfListener());
实现自动滚动按钮监听器;
- /*
- * 自动滚动按钮监听器
- */
- class btnSelfListener implements OnClickListener {
- @Override
- public void onClick(View v) {
- // 当前按钮文字是自动滚动
- if (btnSelfStr == R.string.selfMotion) {
- // 将按钮文字设为“停止滚动”
- btnSelf.setText(R.string.stopSelfMotion);
- btnSelfStr = R.string.stopSelfMotion;
- // 开始自动滚动
- handler.post(ScrollRunnable);
- } else {
- // 将按钮文字设为“自动滚动”
- btnSelf.setText(R.string.selfMotion);
- btnSelfStr = R.string.selfMotion;
- // 停止自动滚动
- handler.removeCallbacks(ScrollRunnable);
- }
- }
- }

/*
* 自动滚动按钮监听器
*/
class btnSelfListener implements OnClickListener { @Override
public void onClick(View v) {
// 当前按钮文字是自动滚动
if (btnSelfStr == R.string.selfMotion) {
// 将按钮文字设为“停止滚动”
btnSelf.setText(R.string.stopSelfMotion);
btnSelfStr = R.string.stopSelfMotion;
// 开始自动滚动
handler.post(ScrollRunnable);
} else {
// 将按钮文字设为“自动滚动”
btnSelf.setText(R.string.selfMotion);
btnSelfStr = R.string.selfMotion;
// 停止自动滚动
handler.removeCallbacks(ScrollRunnable);
}
}
}
这样我们就实现了布局的自动滚动。
----------
那么如何实现根据选择直接滚动到指定的位置。
- // 跳转至开头
- scrollView.fullScroll(ScrollView.FOCUS_UP);

// 跳转至开头
scrollView.fullScroll(ScrollView.FOCUS_UP);
- // 跳转至结尾
- scrollView.fullScroll(ScrollView.FOCUS_DOWN);

// 跳转至结尾
scrollView.fullScroll(ScrollView.FOCUS_DOWN);
我们只要在跳转按钮上添加监听器;
- btnGoto.setOnClickListener(new btnGotoListener());

btnGoto.setOnClickListener(new btnGotoListener());
然后实现该监听器;
- /*
- * 跳转按钮监听器
- */
- class btnGotoListener implements OnClickListener {
- int choice = -1;
- @Override
- public void onClick(View v) {
- // 弹出跳转设置对话框
- new AlertDialog.Builder(MainActivity.this)
- .setTitle("跳转设置")
- .setSingleChoiceItems(new String[] { "开头", "结尾" }, -1,
- new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog,
- int which) {
- switch (which) {
- case 0:
- choice = 0;
- break;
- case 1:
- choice = 1;
- break;
- }
- }
- })
- .setPositiveButton("跳转",
- new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog,
- int which) {
- switch (choice) {
- case 0:
- // 跳转至开头
- scrollView
- .fullScroll(ScrollView.FOCUS_UP);
- break;
- case 1:
- // 跳转至结尾
- scrollView
- .fullScroll(ScrollView.FOCUS_DOWN);
- break;
- }
- }
- }).setNegativeButton("返回", null).show();
- }
- }

/*
* 跳转按钮监听器
*/
class btnGotoListener implements OnClickListener {
int choice = -1;
@Override
public void onClick(View v) {
// 弹出跳转设置对话框
new AlertDialog.Builder(MainActivity.this)
.setTitle("跳转设置")
.setSingleChoiceItems(new String[] { "开头", "结尾" }, -1,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
switch (which) {
case 0:
choice = 0;
break;
case 1:
choice = 1;
break;
}
}
})
.setPositiveButton("跳转",
new DialogInterface.OnClickListener() { @Override
public void onClick(DialogInterface dialog,
int which) {
switch (choice) {
case 0:
// 跳转至开头
scrollView
.fullScroll(ScrollView.FOCUS_UP);
break;
case 1:
// 跳转至结尾
scrollView
.fullScroll(ScrollView.FOCUS_DOWN);
break;
}
}
}).setNegativeButton("返回", null).show();
}
}
这样我们就实现了布局的自动滚动。
----------
利用ScrollView实现布局自动滚动
源码下载:http://download.csdn.net/detail/dkbnull/9298787
ScrollView的更多相关文章
- ScrollView嵌套ListView,GridView数据加载不全问题的解决
我们大家都知道ListView,GridView加载数据项,如果数据项过多时,就会显示滚动条.ScrollView组件里面只能包含一个组件,当ScrollView里面嵌套listView,GridVi ...
- Android ScrollView监听滑动到顶部和底部的两种方式(你可能不知道的细节)
Android ScrollView监听滑动到顶部和底部,虽然网上很多资料都有说,但是不全,而且有些细节没说清楚 使用场景: 1. 做一些复杂动画的时候,需要动态判断当前的ScrollView是否滚动 ...
- React-Native学习系列(二) Image和ScrollView
接下来,我们接着(一)继续讲,今天我们学习的是Image组件和ScrollView组件. Image组件 Image:一个用于显示多种不同类型图片的React组件.那么要如何使用呢? 引入本地图片: ...
- iOS学习笔记——滚动视图(scrollView)
滚动视图:在根视图中添加UIScrollViewDelegate协议,声明一些对象属性 @interface BoViewController : UIViewController<UIScro ...
- 实现下来ScrollView放大轮播图
创建工程,创建一个UIScrollView属性,并遵循其协议: #define kWidth self.view.frame.size.width//屏幕宽 #define kHeight self. ...
- React Native之 ScrollView介绍和使用
前言 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习 本人接触 React Native 时间并不是特别长,所以对其中的内容和性质了解可能会有所 ...
- ScrollView分栏视图分析
代码精华部分如下: //1.添加scrollView /* 1). 添加一个scrollView; 2).创建关注.热门.附近三个控制器. 3). 存储它们的名字到数组中,遍历并放到本控制器里. 4) ...
- IOS实现自动循环滚动广告--ScrollView的优化和封装
一.问题分析 在许多App中,我们都会见到循环滚动的视图,比如广告,其实想实现这个功能并不难,用ScrollView就可以轻松完成,但是在制作的过程中还存在几个小问题,如果能够正确的处理好这些小问题, ...
- ReactNative 根据scrollView/listview滑动距离动态修改NavBar颜色
我们常见某些APP上滑的时候,NavBar颜色会从透明渐变为某种颜色 原理非常简单,根据scrollView的回调动态修改NavBar的透明度即可. 在RN中,尤其是ListView中这个回调不是很好 ...
- iOS无限循环滚动scrollview
经常有园友会问"博主,有没有图片无限滚动的Demo呀?", 正儿八经的图片滚动的Demo我这儿还真没有,今天呢就封装一个可以在项目中直接使用的图片轮播.没看过其他iOS图片无限轮播 ...
随机推荐
- cocos2d-x test学习[1]
controller.cpp std::function<TestScene*()> callback;//一个是返回值,一个是参数.返回值是TestScene*,参数是()里的东西 Co ...
- Final-阶段站立会议6
组名:天天向上 组长:王森 组员:张政.张金生.林莉.胡丽娜 代码地址:HTTPS:https://git.coding.net/jx8zjs/llk.git SSH:git@git.coding.n ...
- php上传大文件时,服务器端php.ini文件中需要额外修改的选项
几个修改点: 1.upload_max_filesize 上传的最大文件 2.post_max_size 上传的最大文件 3.max_execution_time 修改为0表示无超时,一直等待 4.m ...
- 《UML大战需求分析阅读笔记》05
在需求分析的阶段,非功能需求也是十分重要的一个阶段.部署图和构件图就能很好的描述非功能需求. 部署图从硬件的角度.物理层次上进行系统的整体规划,包括当前的IT架构以及改造后的IT构架,包括:Node: ...
- 网页语言有html,php.jsp,无论什么语言浏览器总是能正常显示,这个解析工作是浏览器完成的吗?
不是,浏览器最基本的语言是html也就是说浏览器只看得懂html.css.js等其他的服务器端动态脚本,比如你说的php.jsp等,解析工作是在服务器完成的!打个比方,你在电脑显示屏上看到的一切东西, ...
- VMware安装chrome os遇到选择网络问题.
在下载下来的vmx文件中添加一行ethernet0.virtualDev = "e1000" 就可以了.参考网站http://communities.vmware.com/thre ...
- [4]xlongwei工具类
百度API:xlongwei 这个人提供的接口很多啊,也很实用:Word转Html.Word转Pdf.属性配置.手机号段.微信公众号消息加密.微信公众号消息解密.二维码.关键词.分词.拼音.生僻字.微 ...
- 利用Properties来读取JDBC配置文件
看到这样的标题,肯定会有人问,要连接数据库我直接验证,加载驱动,建立连接等等按步骤来不就行了,
- jvm性能参数与调优
本文中的参数并齐全,看了http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html的相关文章写得很好,可以看一看 1.jvm堆内存简 ...
- Smokeping安装教程
Smokeping安装教程 #Smokeping2.6.8安装教程 #2016.3.6 改编v1.0 #Linux运维技术交流 347163978 环境 CentOS release 6.4 (F ...