先给效果图:
关于ScrollView组件了,其实和HorizontalScroolView组件相似,前者是用来显示垂直方向,后者是显示水平方向,当然ScrollView也是只能添加唯一的一个子组件。
主activity(MainActivity.java):
package com.tody.scrollviewdemo;
import android.os.Bundle;
import android.app.Activity;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;
/**
* 主界面
* @author tody.yang
*
*/
public class MainActivity extends Activity {
private int deviceHeight;//屏幕的高度
private LinearLayout mLinearLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
/**
* 获取屏幕高度
* @return deviceHeight 屏幕高度
*/
private int getDeviceHeight(){
// 获取屏幕分辨率
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
deviceHeight = dm.heightPixels;
return deviceHeight;
}
private void initView(){
mLinearLayout = (LinearLayout) findViewById(R.id.lineLayout);//实例化一个线性布局组件,而这个组件作为ScrollView的唯一子组件
mLinearLayout.removeAllViews();//移除该组件下的所有子组件对象
int[] imageArray = {R.drawable.d0,R.drawable.d1,R.drawable.d2,R.drawable.d3,R.drawable.d4,R.drawable.d5,R.drawable.d6};//实例化一个整型数组用来存放图片资源
for (int i = 0; i < imageArray.length; i++) {//循环的次数和imageArray数组的长度相同
LinearLayout itemLayout = (LinearLayout) LinearLayout.inflate(MainActivity.this, R.layout.scrollview_item, null);//动态实例化一个线性布局
itemLayout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, getDeviceHeight()/3));//高度为当前屏幕的1/3
itemLayout.setGravity(Gravity.CENTER_HORIZONTAL);//设置水平居中
TextView mTextView = (TextView) itemLayout.findViewById(R.id.textView);//实例化scrollview_item布局中的TextView组件
ImageView mImageView = (ImageView) itemLayout.findViewById(R.id.imageView);//实例化scrollview_item布局中的ImageView组件
final String page = "第"+(i+1)+"张";
mTextView.setText(page);//设置显示的文字
mImageView.setBackgroundResource(imageArray[i]);//设置显示的图片
mLinearLayout.addView(itemLayout);
itemLayout.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "点击了"+page, Toast.LENGTH_SHORT).show();
}
});
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
主界面布局文件(activity_main.xml):
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<LinearLayout
android:id="@+id/lineLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
</LinearLayout>
</ScrollView>
</RelativeLayout>
加载子项的布局文件(scrollview_item.xml):
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="俊哥"
android:textSize="20sp"
/>
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/d0"
android:layout_gravity="center_horizontal"
/>
</LinearLayout>