作者:大明白也糊涂 | 来源:互联网 | 2024-11-15 13:25
本文介绍了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 等。