在程序设计中,有时我们需要实现自动滚屏或根据选择直接滚动到指定的位置的功能。这里用到的主要组件就是滚动视图(ScrollView)。

----------

那么使用ScrollView如何实现布局自动滚动。

----------

首先我们要对控件对象进行声明;

  1. private LinearLayout linearLayout = null;
  2. private ScrollView scrollView = null;
private LinearLayout linearLayout = null;
private ScrollView scrollView = null;

然后通过控件的ID得到代表控件的对象;

  1. linearLayout = (LinearLayout) findViewById(R.id.linearLayout);
  2. scrollView = (ScrollView) findViewById(R.id.scrollView);
linearLayout = (LinearLayout) findViewById(R.id.linearLayout);
scrollView = (ScrollView) findViewById(R.id.scrollView);

定义一个Handler对象;

  1. private final Handler handler = new Handler();
private final Handler handler = new Handler();

实现滚动线程;

  1. private Runnable ScrollRunnable = new Runnable() {
  2. @Override
  3. public void run() {
  4. int off = linearLayout.getMeasuredHeight() - scrollView.getHeight();
  5. if (off > 0) {
  6. scrollView.scrollBy(0, 30);
  7. if (scrollView.getScrollY() == off) {
  8. Thread.currentThread().interrupt();
  9. } else {
  10. handler.postDelayed(this, 1000);
  11. }
  12. }
  13. }
  14. };
	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);
}
}
}
};

在自动滚动按钮上添加监听器;

  1. btnSelf.setOnClickListener(new btnSelfListener());
btnSelf.setOnClickListener(new btnSelfListener());

实现自动滚动按钮监听器;

  1. /*
  2. * 自动滚动按钮监听器
  3. */
  4. class btnSelfListener implements OnClickListener {
  5. @Override
  6. public void onClick(View v) {
  7. // 当前按钮文字是自动滚动
  8. if (btnSelfStr == R.string.selfMotion) {
  9. // 将按钮文字设为“停止滚动”
  10. btnSelf.setText(R.string.stopSelfMotion);
  11. btnSelfStr = R.string.stopSelfMotion;
  12. // 开始自动滚动
  13. handler.post(ScrollRunnable);
  14. } else {
  15. // 将按钮文字设为“自动滚动”
  16. btnSelf.setText(R.string.selfMotion);
  17. btnSelfStr = R.string.selfMotion;
  18. // 停止自动滚动
  19. handler.removeCallbacks(ScrollRunnable);
  20. }
  21. }
  22. }
	/*
* 自动滚动按钮监听器
*/
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);
}
}
}

这样我们就实现了布局的自动滚动。
----------

那么如何实现根据选择直接滚动到指定的位置。

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

我们只要在跳转按钮上添加监听器;

  1. btnGoto.setOnClickListener(new btnGotoListener());
btnGoto.setOnClickListener(new btnGotoListener());

然后实现该监听器;

  1. /*
  2. * 跳转按钮监听器
  3. */
  4. class btnGotoListener implements OnClickListener {
  5. int choice = -1;
  6. @Override
  7. public void onClick(View v) {
  8. // 弹出跳转设置对话框
  9. new AlertDialog.Builder(MainActivity.this)
  10. .setTitle("跳转设置")
  11. .setSingleChoiceItems(new String[] { "开头", "结尾" }, -1,
  12. new DialogInterface.OnClickListener() {
  13. @Override
  14. public void onClick(DialogInterface dialog,
  15. int which) {
  16. switch (which) {
  17. case 0:
  18. choice = 0;
  19. break;
  20. case 1:
  21. choice = 1;
  22. break;
  23. }
  24. }
  25. })
  26. .setPositiveButton("跳转",
  27. new DialogInterface.OnClickListener() {
  28. @Override
  29. public void onClick(DialogInterface dialog,
  30. int which) {
  31. switch (choice) {
  32. case 0:
  33. // 跳转至开头
  34. scrollView
  35. .fullScroll(ScrollView.FOCUS_UP);
  36. break;
  37. case 1:
  38. // 跳转至结尾
  39. scrollView
  40. .fullScroll(ScrollView.FOCUS_DOWN);
  41. break;
  42. }
  43. }
  44. }).setNegativeButton("返回", null).show();
  45. }
  46. }
	/*
* 跳转按钮监听器
*/
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的更多相关文章

  1. ScrollView嵌套ListView,GridView数据加载不全问题的解决

    我们大家都知道ListView,GridView加载数据项,如果数据项过多时,就会显示滚动条.ScrollView组件里面只能包含一个组件,当ScrollView里面嵌套listView,GridVi ...

  2. Android ScrollView监听滑动到顶部和底部的两种方式(你可能不知道的细节)

    Android ScrollView监听滑动到顶部和底部,虽然网上很多资料都有说,但是不全,而且有些细节没说清楚 使用场景: 1. 做一些复杂动画的时候,需要动态判断当前的ScrollView是否滚动 ...

  3. React-Native学习系列(二) Image和ScrollView

    接下来,我们接着(一)继续讲,今天我们学习的是Image组件和ScrollView组件. Image组件 Image:一个用于显示多种不同类型图片的React组件.那么要如何使用呢? 引入本地图片: ...

  4. iOS学习笔记——滚动视图(scrollView)

    滚动视图:在根视图中添加UIScrollViewDelegate协议,声明一些对象属性 @interface BoViewController : UIViewController<UIScro ...

  5. 实现下来ScrollView放大轮播图

    创建工程,创建一个UIScrollView属性,并遵循其协议: #define kWidth self.view.frame.size.width//屏幕宽 #define kHeight self. ...

  6. React Native之 ScrollView介绍和使用

    前言 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习 本人接触 React Native 时间并不是特别长,所以对其中的内容和性质了解可能会有所 ...

  7. ScrollView分栏视图分析

    代码精华部分如下: //1.添加scrollView /* 1). 添加一个scrollView; 2).创建关注.热门.附近三个控制器. 3). 存储它们的名字到数组中,遍历并放到本控制器里. 4) ...

  8. IOS实现自动循环滚动广告--ScrollView的优化和封装

    一.问题分析 在许多App中,我们都会见到循环滚动的视图,比如广告,其实想实现这个功能并不难,用ScrollView就可以轻松完成,但是在制作的过程中还存在几个小问题,如果能够正确的处理好这些小问题, ...

  9. ReactNative 根据scrollView/listview滑动距离动态修改NavBar颜色

    我们常见某些APP上滑的时候,NavBar颜色会从透明渐变为某种颜色 原理非常简单,根据scrollView的回调动态修改NavBar的透明度即可. 在RN中,尤其是ListView中这个回调不是很好 ...

  10. iOS无限循环滚动scrollview

    经常有园友会问"博主,有没有图片无限滚动的Demo呀?", 正儿八经的图片滚动的Demo我这儿还真没有,今天呢就封装一个可以在项目中直接使用的图片轮播.没看过其他iOS图片无限轮播 ...

随机推荐

  1. 本周psp

      本周PSP 类别 内容 开始时间 中止时间 终止时间 总用时 产品计划会议 定义产品的用户需求,以及从这个产品中得到什么.解决啥问题 18:00 0 20:00 120分钟 撰写博客 会议记录与个 ...

  2. JS学习总结(新手)

    1. JS面向对象 http://www.cnblogs.com/JavascriptDream/p/5064976.html a. Prototype 属性的理解 b. 遗传继承函数 functio ...

  3. Mysql 数据库之常用命令[更新中...]

    连接命令:mysql -h[主机地址] -u[用户名] -p[用户密码] 创建数据库:create database [库名] 例如:create database jtest; 显示所有数据库: s ...

  4. 从零构建JavaScript的对象系统

    一.正统的类与继承 类是对象的定义,而对象是类的实例(Instance).类不可直接使用,要想使用就必须在内存上生成该类的副本,这个副本就是对象. 以Java为例: public class Grou ...

  5. C#组合查询小Demo

    namespace WindowsFormsApplication1 { public partial class Form1 : Form { string Sql = "select * ...

  6. Redis学习笔记(3)-Hash

    package cn.com; import java.util.HashMap; import java.util.List; import java.util.Map; import java.u ...

  7. MySQL 插入数据 通过命令提示窗口插入数据

    MySQL 表中使用 INSERT INTO SQL语句来插入数据. 你可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据. 语法 以下为向MySQL数据表插 ...

  8. Windows zabbix监控远程进程实现机制

    最近负责zabbix监控部署方面的工作,需要完成本地服务端监控远程虚拟机的运行状态(CPU.打开的进程等),与大家分享下我的实现方法. (1) 首先,需要实现记录zabbix客户端的进程的批处理:za ...

  9. C++学习笔记 指针与引用

    指针与引用  1. 指针 (1) 指针是一个变量(实体),存储的是一个地址,指向内存的一个存储单元,指针可以为空 (2) 指针可以为空,在声明定义时可以不初始化 (3) 指针在初始化之后可以重新指向其 ...

  10. PorterDuffXfermode的用法

    1.下面的Xfermode子类可以改变这种行为: AvoidXfermode  指定了一个颜色和容差,强制Paint避免在它上面绘图(或者只在它上面绘图). PixelXorXfermode  当覆盖 ...