热门标签 | 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 等。

推荐阅读
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社区 版权所有