系出名门Android(8) - 控件(View)之TextSwitcher, Gallery, ImageSwitcher, GridView, ListView

简介:
[索引页]
[源码下载]


系出名门Android(8) - 控件(View)之TextSwitcher, Gallery, ImageSwitcher, GridView, ListView, ExpandableList


作者: webabcd


介绍
在 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 };  
        }  
}
 
 


     本文转自webabcd 51CTO博客,原文链接:http://blog.51cto.com/webabcd/342090 ,如需转载请自行联系原作者
相关文章
|
2月前
|
XML 存储 Java
浅谈Android的TextView控件
浅谈Android的TextView控件
41 0
|
3月前
|
XML 编解码 Android开发
安卓开发中的自定义视图控件
【9月更文挑战第14天】在安卓开发中,自定义视图控件是一种高级技巧,它可以让开发者根据项目需求创建出独特的用户界面元素。本文将通过一个简单示例,引导你了解如何在安卓项目中实现自定义视图控件,包括创建自定义控件类、处理绘制逻辑以及响应用户交互。无论你是初学者还是有经验的开发者,这篇文章都会为你提供有价值的见解和技巧。
52 3
|
4月前
|
前端开发 Android开发 开发者
安卓开发中的自定义视图:构建你的第一个控件
【8月更文挑战第26天】在安卓开发的浩瀚海洋中,自定义视图是一块充满魔力的乐土。它不仅是开发者展示创造力的舞台,更是实现独特用户体验的关键。本文将带你步入自定义视图的世界,从基础概念到实战应用,一步步教你如何打造自己的第一个控件。无论你是初学者还是有经验的开发者,这篇文章都将为你的开发之旅增添新的风景。
|
6月前
|
API Android开发 开发者
`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView
【6月更文挑战第26天】`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView。它提供高效的数据视图复用,优化的布局管理,支持多种布局(如线性、网格),并解耦数据、适配器和视图。RecyclerView的灵活性、性能(如局部刷新和动画支持)和扩展性使其成为现代Android开发的首选,特别是在处理大规模数据集时。
70 2
|
5月前
|
XML 数据格式
Android-自定义三角形评分控件
Android-自定义三角形评分控件
42 0
|
6月前
|
XML Android开发 数据格式
Android基础控件介绍
Android基础控件介绍
|
6月前
|
Android开发
Android 自定义View 测量控件宽高、自定义viewgroup测量
Android 自定义View 测量控件宽高、自定义viewgroup测量
106 0
|
XML Android开发 数据格式
Android自定义控件(十二)——自定义属性及应用
Android自定义控件(十二)——自定义属性及应用
182 0
Android自定义控件(十二)——自定义属性及应用
|
XML Android开发 数据格式
Android开发技巧——自定义控件之自定义属性
Android开发技巧——自定义控件之自定义属性 掌握自定义控件是很重要的,因为通过自定义控件,能够:解决UI问题,优化布局性能,简化布局代码。 上一篇讲了如何通过xml把几个控件组织起来,并继承某个ViewGroup子类,把它们封装起来使用。
1161 0