GridView和ImageSwitcher以及ImageView

网格布局GridView和Listview很相似,只不过前者是多列的.如果把GridView的android:numColumns设置为1,他就是ListView了.

通过GridView和ImageSwitcher以及ImageView做一个"带有预览的图片浏览器"

ImageSwitcher和ImageView十分相似,只不过比后者多了一个功能---它所显示的图片切换时可以设置动画效果

使用ImageSwitcher时,需要给他设置ImageSwitcher.ViewFactory, 实现ImageSwitcher.viewFactory时,需要实现一个makeView()方法, 该方法通常返回一个ImageView对象, 而ImageSwitcher则负责显示这个Imageview对象.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <GridView
        android:id="@+id/gv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:numColumns="4" >
    </GridView>

    <ImageSwitcher
        android:id="@+id/is"
        android:layout_width="320dp"
        android:layout_height="320dp" >
    </ImageSwitcher>

</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

主程序如下

public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.grid);

        GridView gv = (GridView) findViewById(R.id.gv);
        final ImageSwitcher is = (ImageSwitcher) findViewById(R.id.is);

        final int[] images = new int[] { R.drawable.bomb5, R.drawable.bomb6,
                R.drawable.bomb7, R.drawable.bomb8, R.drawable.bomb9,
                R.drawable.bomb10, R.drawable.bomb11, R.drawable.bomb12,
                R.drawable.bomb13, R.drawable.bomb14, R.drawable.bomb15,
                R.drawable.bomb16 };

        List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
        for (int i = 0; i < images.length; i++) {
            Map<String, Object> map = new HashMap<String, Object>();
            map.put("image", images[i]);
            data.add(map);
        }

        // 设置动画
        is.setInAnimation(AnimationUtils.loadAnimation(this,
                android.R.anim.fade_in));
        is.setOutAnimation(AnimationUtils.loadAnimation(this,
                android.R.anim.fade_out));

        // 设置图片切换效果
        is.setFactory(new ViewFactory() {

            @Override
            public View makeView() {
                ImageView iv = new ImageView(MainActivity.this);
                iv.setBackgroundColor(0xff0000); // 设置背景色
                iv.setScaleType(ScaleType.FIT_CENTER);// 设置缩放类型
                iv.setLayoutParams(new ImageSwitcher.LayoutParams(
                        LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
                return iv;
            }
        });

        //在适配器中引入 cell布局文件,
        SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.cell,
                new String[] { "image" }, new int[] { R.id.image});

        gv.setAdapter(adapter);

        gv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                is.setImageResource(images[position % images.length]);

            }
        });

        gv.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> parent, View view,
                    int position, long id) {
                is.setImageResource(images[position % images.length]);
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
            }
        });

    }

}
原文地址:https://www.cnblogs.com/android-zcq/p/3140706.html