热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

AndroidGUI开发:ScrollView和HorizontalScrollView的常见用法

本文介绍了Android开发中常用的滚动视图组件ScrollView和HorizontalScrollView的基本用法和注意事项,帮助开发者更好地处理屏幕内容超出显示范围的情况。

在 Android 开发中,屏幕大小是有限的,特别是在移动设备上。当需要显示的内容超过屏幕尺寸时,滚动视图组件如 ScrollView 和 HorizontalScrollView 就显得尤为重要。

ScrollView 是 ViewGroup 的子类,而 ViewGroup 又是 View 的子类。ScrollView 主要用于垂直滚动,它只能包含一个直接子视图。通常情况下,这个直接子视图是一个 LinearLayout,在这个 LinearLayout 中可以包含其他视图对象。

HorizontalScrollView 则用于水平滚动,其用法与 ScrollView 类似,但仅支持水平方向的滚动。

如果需要同时支持垂直和水平滚动,可以将 HorizontalScrollView 作为 ScrollView 的直接子视图,或者反过来。

示例代码

1. 创建项目并修改 main.xml

首先,创建一个新的 Android 项目,并修改布局文件 main.xml 如下:




    

        

    


在这个布局中,ScrollView 包含了一个 HorizontalScrollView,而 HorizontalScrollView 包含了一个 ImageView,用于显示一个 1280x800 像素的大图片。

2. 拷贝图片资源

将图片文件 desktop.png 拷贝到 res/drawable-mdpi 文件夹下。

3. 修改 Activity 代码

接下来,修改对应的 Java 代码,使其如下所示:

package com.pat.gui;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnTouchListener;
import android.widget.HorizontalScrollView;
import android.widget.ScrollView;

public class ControlScrollView extends Activity implements OnTouchListener {

    private ScrollView vsv;
    private HorizontalScrollView hsv;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // 去掉标题栏
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        // 全屏显示
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.main);

        vsv = (ScrollView) findViewById(R.id.vsv);
        hsv = (HorizontalScrollView) findViewById(R.id.hsv);

        vsv.setOnTouchListener(this);
        hsv.setOnTouchListener(this);
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_MOVE) {
            int x = (int) event.getX();
            int y = (int) event.getY();
            Log.e("Coordinates=", "(" + x + ", " + y + ")");
        }
        return false;
    }
}

运行结果如下:用户可以在水平方向或垂直方向上滚动视图。对应的 Logcat 输出如下:

所输出的坐标即为鼠标(真机上的手指)开始接触屏幕时的坐标。

4. 说明

  • 水平方向和垂直方向不能同时滚动。也就是说,要么水平滚动,要么垂直滚动,而不能两个方向同时滚动。
  • ImageView 可以由其他 View 对象代替,比如 LinearLayout,在 LinearLayout 中可以放置其他组件,如 EditText、Button 等。

推荐阅读
  • 本文介绍如何使用 Android 的 Canvas 和 View 组件创建一个简单的绘图板应用程序,支持触摸绘画和保存图片功能。 ... [详细]
  • 本文介绍了Android开发中Intent的基本概念及其在不同Activity之间的数据传递方式,详细展示了如何通过Intent实现Activity间的跳转和数据传输。 ... [详细]
  • 本文介绍如何使用布局文件在Android应用中排列多行TextView和Button,使其占据屏幕的特定比例,并提供示例代码以帮助理解和实现。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • dotnet 通过 Elmish.WPF 使用 F# 编写 WPF 应用
    本文来安利大家一个有趣而且强大的库,通过F#和C#混合编程编写WPF应用,可以在WPF中使用到F#强大的数据处理能力在GitHub上完全开源Elmis ... [详细]
  • 本文探讨了在Java中实现系统托盘最小化的两种方法:使用SWT库和JDK6自带的功能。通过这两种方式,开发者可以创建跨平台的应用程序,使窗口能够最小化到系统托盘,并提供丰富的交互功能。 ... [详细]
  • 在 Android 开发中,通过 Intent 启动 Activity 或 Service 时,可以使用 putExtra 方法传递数据。接收方可以通过 getIntent().getExtras() 获取这些数据。本文将介绍如何使用 RoboGuice 框架简化这一过程,特别是 @InjectExtra 注解的使用。 ... [详细]
  • ListView简单使用
    先上效果:主要实现了Listview的绑定和点击事件。项目资源结构如下:先创建一个动物类,用来装载数据:Animal类如下:packagecom.example.simplelis ... [详细]
  • 本文介绍了在Android项目中实现时间轴效果的方法,通过自定义ListView的Item布局和适配器逻辑,实现了动态显示和隐藏时间标签的功能。文中详细描述了布局文件、适配器代码以及时间格式化工具类的具体实现。 ... [详细]
  • 开发笔记:Python:GUI之tkinter学习笔记1控件的介绍及使用
    开发笔记:Python:GUI之tkinter学习笔记1控件的介绍及使用 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 使用GDI的一些AIP函数我们可以轻易的绘制出简 ... [详细]
  • 在 Flutter 开发过程中,开发者经常会遇到 Widget 构造函数中的可选参数 Key。对于初学者来说,理解 Key 的作用和使用场景可能是一个挑战。本文将详细探讨 Key 的概念及其应用场景,并通过实例帮助你更好地掌握这一重要工具。 ... [详细]
  • 本文介绍如何利用QFileSystemModel进行目录的浏览、创建及删除操作,并提供了一个简单的对话框界面实现。 ... [详细]
author-avatar
大明白也糊涂
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有