GridView用于在界面上按行、列分布显示多个组件。GridView和ListView有共同父类:AbsListView。
GridView与ListView的差别在于:ListView仅仅在一个方向上分布,GridView在两个方向上分布。所以使用GridView时一般都指定numColumns大于1,否则该属性默认值为1。就意味着改GridView仅仅有一列,那就变成了ListView
GridView的xml属性
android:strtchMode 的值为:
ImageSwitcher由FrameLayout派生而出,ImageSwitcher组件与ImageView非常相似,可是ImageSwitcher多一个功能:它所显示的图片切换时能够设置动画效果。
使用ImageSwitcher时往往须要为它设置一个ImageSwitcher.ViewFactory的makeView()方法来负责显示ImageView
以下结合GridView和ImageSwitcher来实现一个样例
(1)activity_main.xml 布局GridView和ImageSwitcher
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center_horizontal"> <GridView android:id="@+id/grid" android:layout_width="fill_parent" android:layout_height="wrap_content" android:horizontalSpacing="1dp" android:verticalSpacing="2dp" android:numColumns="4"/> <ImageSwitcher android:id="@+id/imageSwitch" android:layout_gravity="center_vertical|center_horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout>
(2)img.xml 布局imageView 用于显示GridView的图片
<?xml version="1.0" encoding="UTF-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ImageView android:id="@+id/img" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout>
(3)MainActivity.java
package com.example.viewimage; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.animation.AnimationUtils; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.GridView; import android.widget.ImageSwitcher; import android.widget.ImageView; import android.widget.ImageView.ScaleType; import android.widget.SimpleAdapter; import android.widget.ViewSwitcher.ViewFactory; public class MainActivity extends Activity { //定义组件 private GridView gredView = null; private ImageSwitcher imageSwt =null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取布局组件 gredView = (GridView) findViewById(R.id.grid); imageSwt = (ImageSwitcher) findViewById(R.id.imageSwitch); //图片 final int images[] = new int[]{ R.drawable.name01,R.drawable.name02,R.drawable.name03,R.drawable.name04, R.drawable.name05,R.drawable.name06,R.drawable.name07,R.drawable.name08, R.drawable.name09,R.drawable.name10,R.drawable.name11,R.drawable.name12, R.drawable.name13,R.drawable.name14,R.drawable.name15,R.drawable.name16 }; //创建list集合。存储图片 List<Map<String,Object>> list = new ArrayList<Map<String,Object>>(); for(int i=0;i<images.length;i++){ Map<String,Object> map = new HashMap<String,Object>(); map.put("img", images[i]); list.add(map); } //设置图片更换效果 //淡入效果 imageSwt.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in)); //淡出效果 imageSwt.setOutAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_out)); //设置图片转换效果 imageSwt.setFactory(new ViewFactory() { @Override public View makeView() { ImageView imageView = new ImageView(MainActivity.this); imageView.setLayoutParams(new ImageSwitcher.LayoutParams(300, 300)); imageView.setScaleType(ScaleType.FIT_CENTER); return imageView; } }); //设置适配器 SimpleAdapter simpleAdapter = new SimpleAdapter(this, list, R.layout.img, new String[]{"img"}, new int[]{R.id.img}); //适配器 gredView.setAdapter(simpleAdapter); //选中事件监听 gredView.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { Log.i("onItemSelected", "onItemSelected"); imageSwt.setImageResource(images[position]); } @Override public void onNothingSelected(AdapterView<?> parent) { // TODO Auto-generated method stub } }); //点击事件监听 gredView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Log.i("onItemClick", "onItemClick"); imageSwt.setImageResource(images[position]); } }); } }
执行效果例如以下: