• 控件(View)之TextSwitcher, Gallery, ImageSwitcher, GridView, ListView, ExpandableList【转】


    在 Android 中使用各种控件(View)
    TextSwitcher - 文字转换器控件(改变文字时增加一些动画效果)
    Gallery - 缩略图浏览器控件
    ImageSwitcher - 图片转换器控件(改变图片时增加一些动画效果)
    GridView - 网格控件
    ListView - 列表控件
    ExpandableList - 支持展开/收缩功能的列表控件

    1、TextSwitcher 的 Demo
    textswitcher.xml

    代码

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <Button android:id="@+id/btnChange" android:layout_width="wrap_content"
            android:layout_height="wrap_content" android:text="改变文字" />
        <!--
            TextSwitcher - 文字转换器控件(改变文字时增加一些动画效果)
        -->
        <TextSwitcher android:id="@+id/textSwitcher"
            android:layout_width="fill_parent" android:layout_height="wrap_content" />
    </LinearLayout>

    _TextSwitcher.java

    代码

    package com.webabcd.view;
    import java.util.Random;
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.animation.Animation;
    import android.view.animation.AnimationUtils;
    import android.widget.Button;
    import android.widget.TextSwitcher;
    import android.widget.TextView;
    import android.widget.ViewSwitcher;
    public class _TextSwitcher extends Activity implements ViewSwitcher.ViewFactory {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            this.setContentView(R.layout.textswithcer);
            setTitle("TextSwithcer");
            final TextSwitcher switcher = (TextSwitcher) findViewById(R.id.textSwitcher);
            // 指定转换器的 ViewSwitcher.ViewFactory
            switcher.setFactory(this);
            // 设置淡入和淡出的动画效果
            Animation in = AnimationUtils.loadAnimation(this, android.R.anim.fade_in);
            Animation out = AnimationUtils.loadAnimation(this, android.R.anim.fade_out);
            switcher.setInAnimation(in);
            switcher.setOutAnimation(out);
            // 单击一次按钮改变一次文字
            Button btnChange = (Button) this.findViewById(R.id.btnChange);
            btnChange.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    switcher.setText(String.valueOf(new Random().nextInt()));
                }
            });
        }
        // 重写 ViewSwitcher.ViewFactory 的 makeView(),返回一个 View
        @Override
        public View makeView() {
            TextView textView = new TextView(this);
            textView.setTextSize(36);
            return textView;
        }
    }

    2、Gallery 的 Demo
    gallery.xml

    代码

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <!--
            Gallery - 缩略图浏览器控件
                spacing - 缩略图列表中各个缩略图之间的间距
        -->
        <Gallery android:id="@+id/gallery" android:layout_width="fill_parent"
            android:layout_height="wrap_content" android:spacing="20px" />
    </LinearLayout>

    _Gallery.java

    代码

    package com.webabcd.view;
    import android.app.Activity;
    import android.content.Context;
    import android.os.Bundle;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AdapterView;
    import android.widget.BaseAdapter;
    import android.widget.Gallery;
    import android.widget.ImageView;
    import android.widget.Toast;
    import android.widget.Gallery.LayoutParams;
    public class _Gallery extends Activity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            this.setContentView(R.layout.gallery);
            setTitle("Gallery");
            Gallery gallery = (Gallery) findViewById(R.id.gallery);
            // 为缩略图浏览器指定一个适配器
            gallery.setAdapter(new ImageAdapter(this));
            // 响应 在缩略图列表上选中某个缩略图后的 事件
            gallery.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parent, View v,
                        int position, long id) {
                    Toast.makeText(_Gallery.this, String.valueOf(position), Toast.LENGTH_SHORT).show();
                }
                @Override
                public void onNothingSelected(AdapterView<?> arg0) {
                }
            });
        }
        // 继承 BaseAdapter 用以实现自定义的图片适配器
        public class ImageAdapter extends BaseAdapter {
            private Context mContext;
            public ImageAdapter(Context context) {
                mContext = context;
            }
            public int getCount() {
                return mThumbIds.length;
            }
            public Object getItem(int position) {
                return position;
            }
            public long getItemId(int position) {
                return position;
            }
            public View getView(int position, View convertView, ViewGroup parent) {
                ImageView image = new ImageView(mContext);
                image.setImageResource(mThumbIds[position]);
                image.setAdjustViewBounds(true);
                image.setLayoutParams(new Gallery.LayoutParams(
                        LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
                return image;
            }
        }
        // 需要显示的图片集合
        private Integer[] mThumbIds = { R.drawable.icon01, R.drawable.icon02,
                R.drawable.icon03, R.drawable.icon04, R.drawable.icon05 };
    }

    3、ImageSwitcher 的 Demo
    imageswitcher.xml

    代码

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <Gallery android:id="@+id/gallery" android:layout_width="fill_parent"
            android:layout_height="wrap_content" android:spacing="20px" />
        <!--
            ImageSwitcher - 图片转换器控件(改变图片时增加一些动画效果)
        -->
        <ImageSwitcher android:id="@+id/imageSwitcher"
            android:layout_width="fill_parent" android:layout_height="wrap_content" />
    </LinearLayout>

    _ImageSwitcher.java

    代码

    package com.webabcd.view;
    import android.app.Activity;
    import android.content.Context;
    import android.os.Bundle;
    import android.view.View;
    import android.view.ViewGroup;
    import android.view.animation.AnimationUtils;
    import android.widget.AdapterView;
    import android.widget.BaseAdapter;
    import android.widget.Gallery;
    import android.widget.ImageSwitcher;
    import android.widget.ImageView;
    import android.widget.ViewSwitcher;
    import android.widget.Gallery.LayoutParams;
    // 图片转换器的使用基本同文字转换器
    // 以下是一个用 ImageSwitcher + Gallery 实现的经典的图片浏览器的 Demo
    public class _ImageSwitcher extends Activity implements
            ViewSwitcher.ViewFactory {
        private ImageSwitcher mSwitcher;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            this.setContentView(R.layout.imageswithcer);
            setTitle("ImageSwithcer");
            mSwitcher = (ImageSwitcher) findViewById(R.id.imageSwitcher);
            mSwitcher.setFactory(this);
            mSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,
                    android.R.anim.fade_in));
            mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,
                    android.R.anim.fade_out));
            Gallery gallery = (Gallery) findViewById(R.id.gallery);
            gallery.setAdapter(new ImageAdapter(this));
            gallery.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parent, View v,
                        int position, long id) {
                    mSwitcher.setImageResource(mImageIds[position]);
                }
                @Override
                public void onNothingSelected(AdapterView<?> arg0) {
                }
            });
        }
        public class ImageAdapter extends BaseAdapter {
            private Context mContext;
            public ImageAdapter(Context context) {
                mContext = context;
            }
            public int getCount() {
                return mThumbIds.length;
            }
            public Object getItem(int position) {
                return position;
            }
            public long getItemId(int position) {
                return position;
            }
            public View getView(int position, View convertView, ViewGroup parent) {
                ImageView image = new ImageView(mContext);
                image.setImageResource(mThumbIds[position]);
                image.setAdjustViewBounds(true);
                image.setLayoutParams(new Gallery.LayoutParams(
                        LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
                return image;
            }
        }
        private Integer[] mThumbIds = { R.drawable.icon01, R.drawable.icon02,
                R.drawable.icon03, R.drawable.icon04, R.drawable.icon05 };
        private Integer[] mImageIds = { R.drawable.icon01, R.drawable.icon02,
                R.drawable.icon03, R.drawable.icon04, R.drawable.icon05 };
        @Override
        public View makeView() {
            ImageView image = new ImageView(this);
            image.setMinimumHeight(200);
            image.setMinimumWidth(200);
            image.setScaleType(ImageView.ScaleType.FIT_CENTER);
            image.setLayoutParams(new ImageSwitcher.LayoutParams(
                    LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
            return image;
        }
    }

    4、GridView 的 Demo
    gridview.xml

    代码

    <?xml version="1.0" encoding="utf-8"?>
    <!--
        GridView - 网格控件
            numColumns="auto_fit" - 列数自适应
            stretchMode - 缩放模式(stretchMode="columnWidth" - 缩放与列宽大小同步)
    -->
    <GridView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/gridView" android:layout_width="fill_parent"
        android:layout_height="fill_parent" android:padding="10px"
        android:verticalSpacing="10px" android:horizontalSpacing="10px"
        android:numColumns="auto_fit" android:columnWidth="60px"
        android:stretchMode="columnWidth" android:gravity="center">
    </GridView>

    _GridView.java

    代码

    package com.webabcd.view;
    import android.app.Activity;
    import android.content.Context;
    import android.os.Bundle;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.GridView;
    import android.widget.ImageView;
    public class _GridView extends Activity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            this.setContentView(R.layout.gridview);
            setTitle("GridView");
            GridView gridView = (GridView) findViewById(R.id.gridView);
            // 指定网格控件的适配器为自定义的图片适配器
            gridView.setAdapter(new ImageAdapter(this));
        }
        // 自定义的图片适配器
        public class ImageAdapter extends BaseAdapter {
            private Context mContext;
            public ImageAdapter(Context context) {
                mContext = context;
            }
            public int getCount() {
                return mThumbIds.length;
            }
            public Object getItem(int position) {
                return position;
            }
            public long getItemId(int position) {
                return position;
            }
            public View getView(int position, View convertView, ViewGroup parent) {
                ImageView imageView;
                if (convertView == null) {
                    imageView = new ImageView(mContext);
                    imageView.setLayoutParams(new GridView.LayoutParams(48, 48));
                    imageView.setAdjustViewBounds(false);
                    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
                    imageView.setPadding(5, 5, 5, 5);
                } else {
                    imageView = (ImageView) convertView;
                }
                imageView.setImageResource(mThumbIds[position]);
                return imageView;
            }
            // 网格控件所需图片数据的数据源
            private Integer[] mThumbIds = { R.drawable.icon01, R.drawable.icon02,
                    R.drawable.icon03, R.drawable.icon04, R.drawable.icon05 };
        }
    }

    5、ListView 的 Demo
    main_list_adapter.xml

    代码

    <?xml version="1.0" encoding="utf-8"?>
    <!--
        自定义列表适配器的 layout
    -->
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal" android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <TextView android:id="@+id/text" android:layout_width="wrap_content"
            android:layout_height="wrap_content" android:textSize="16sp">
        </TextView>
    </LinearLayout>

  • 相关阅读:
    【博弈论】【SG函数】【找规律】Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined) E. Game of Stones
    【概率dp】Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined) D. Jon and Orbs
    【基数排序】Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined) C. Jon Snow and his Favourite Number
    【找规律】Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined) B. Code For 1
    【kmp算法】poj2185 Milking Grid
    【kmp算法】poj2406 Power Strings
    【DFS】Codeforces Round #398 (Div. 2) C. Garland
    【枚举】【贪心】 Codeforces Round #398 (Div. 2) B. The Queue
    【暴力】Codeforces Round #398 (Div. 2) A. Snacktower
    【kmp算法】uva11475 Extend to Palindrome
  • 原文地址:https://www.cnblogs.com/wzh206/p/1723383.html
Copyright © 2020-2023  润新知