系出名门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 ,如需转载请自行联系原作者
相关文章
|
3月前
|
XML 前端开发 Android开发
Android:UI:Drawable:View/ImageView与Drawable
通过本文的介绍,我们详细探讨了Android中Drawable、View和ImageView的使用方法及其相互关系。Drawable作为图像和图形的抽象表示,提供了丰富的子类和自定义能力,使得开发者能够灵活地实现各种UI效果。View和ImageView则通过使用Drawable实现了各种图像和图形的显示需求。希望本文能为您在Android开发中使用Drawable提供有价值的参考和指导。
62 2
|
3月前
|
Android开发 开发者 UED
安卓开发中自定义View的实现与性能优化
【10月更文挑战第28天】在安卓开发领域,自定义View是提升应用界面独特性和用户体验的重要手段。本文将深入探讨如何高效地创建和管理自定义View,以及如何通过代码和性能调优来确保流畅的交互体验。我们将一起学习自定义View的生命周期、绘图基础和事件处理,进而探索内存和布局优化技巧,最终实现既美观又高效的安卓界面。
69 5
|
4月前
|
缓存 数据处理 Android开发
在 Android 中使用 RxJava 更新 View
【10月更文挑战第20天】使用 RxJava 来更新 View 可以提供更优雅、更高效的解决方案。通过合理地运用操作符和订阅机制,我们能够轻松地处理异步数据并在主线程中进行 View 的更新。在实际应用中,需要根据具体情况进行灵活运用,并注意相关的注意事项和性能优化,以确保应用的稳定性和流畅性。可以通过不断的实践和探索,进一步掌握在 Android 中使用 RxJava 更新 View 的技巧和方法,为开发高质量的 Android 应用提供有力支持。
|
4月前
|
缓存 调度 Android开发
Android 在子线程更新 View
【10月更文挑战第21天】在 Android 开发中,虽然不能直接在子线程更新 View,但通过使用 Handler、AsyncTask 或 RxJava 等方法,可以实现子线程操作并在主线程更新 View 的目的。在实际应用中,需要根据具体情况选择合适的方法,并注意相关的注意事项和性能优化,以确保应用的稳定性和流畅性。可以通过不断的实践和探索,进一步掌握在子线程更新 View 的技巧和方法,为开发高质量的 Android 应用提供支持。
73 2
|
4月前
|
XML 前端开发 Android开发
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
|
4月前
|
XML 前端开发 Android开发
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
41 2
|
4月前
|
数据可视化 Android开发 开发者
安卓应用开发中的自定义View组件
【10月更文挑战第5天】在安卓应用开发中,自定义View组件是提升用户交互体验的利器。本篇将深入探讨如何从零开始创建自定义View,包括设计理念、实现步骤以及性能优化技巧,帮助开发者打造流畅且富有创意的用户界面。
151 0
|
XML Android开发 数据格式
Android自定义控件(十二)——自定义属性及应用
Android自定义控件(十二)——自定义属性及应用
206 0
Android自定义控件(十二)——自定义属性及应用
|
XML 前端开发 Android开发
android自定义控件(理论知识学习 +自定义属性的讲解)
View树和UI界面架构图   UI界面架构图: android视图最外层是一个window对象。 phoneWindow来实现。 phoneWindow将一个decorView作为整个布局的根view. 屏幕分为TitleView和ContentView. ContentView的根布局为framelayout.   view的测量: view的测量通过onMesure()来进行的: onMesure用来确定视图大小和位置。
1091 0
|
Android开发
Android自定义控件及自定义属性
Android自定义控件及自定义属性 自定义控件 创建自定义控件 自定义一个类,继承View 继承View还是哪个类,取决于你要实现一个什么样的控件 如...
1268 0

热门文章

最新文章

  • 1
    如何修复 Android 和 Windows 不支持视频编解码器的问题?
  • 2
    Android历史版本与APK文件结构
  • 3
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 4
    【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
  • 5
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
  • 6
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
  • 7
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 8
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 9
    Android经典面试题之Kotlin中Lambda表达式和匿名函数的区别
  • 10
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 1
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    14
  • 2
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    28
  • 3
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    34
  • 4
    Android历史版本与APK文件结构
    121
  • 5
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    29
  • 6
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    23
  • 7
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
    60
  • 8
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    37
  • 9
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
    73
  • 10
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    121