Android UI控件之ImageSwitcher(图片切换)

zz/2024/7/13 11:27:15

       从该名字就可以看出来,ImageSwitcher是一个图片切换控件,可以在一系列的图片中,逐张

        的显示特定的图片,利用该控件可以实现图片浏览器中的上一张,下一张的功能。其使用方法也较

        为简单,不过需要注意的是ImageSwitcher在使用的时候需要一个ViewFactory,用来区分显示图片

        的容器和他的父窗口。

                具体的用法直接看实例,照例,先上效果图

                   

                看看下一张的效果:

                布局文件就不多谈了直接看MainActivity代码部分吧:

[java]  view plain copy
  1. package com.kiritor.ui_imageswitcher;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.view.View;  
  6. import android.view.View.OnClickListener;  
  7. import android.widget.Button;  
  8. import android.widget.ImageSwitcher;  
  9. import android.widget.ImageView;  
  10. import android.widget.ViewSwitcher.ViewFactory;  
  11. /*注意,此处直接让该类实现ViewFactory和OnClickListener接口*/  
  12. public class MainActivity extends Activity implements ViewFactory, OnClickListener {  
  13.       /*获取图片资源集*/  
  14.       private static final Integer[] images = {  
  15.            R.drawable.first,  
  16.            R.drawable.second,  
  17.            R.drawable.third,  
  18.              
  19.       };  
  20.        
  21.       private ImageSwitcher is;  
  22.       private Button btnPrev,btnNext;  
  23.       private static int index = 0;  
  24.     /** Called when the activity is first created. */  
  25.     @Override  
  26.     public void onCreate(Bundle savedInstanceState) {  
  27.         super.onCreate(savedInstanceState);  
  28.         setContentView(R.layout.activity_main);  
  29.         /*通过ID获取控件*/  
  30.         is = (ImageSwitcher) findViewById(R.id.image_switchter);  
  31.         btnPrev = (Button) findViewById(R.id.pre);  
  32.         btnNext = (Button) findViewById(R.id.next);  
  33.         
  34.         is.setFactory(this);//设置ImageSwitcher所需的ViewFactory  
  35.         is.setImageResource(images[index]);//设置初始的图片资源  
  36.         /*由于本类实现了OnClickListen而接口,所以这里参数可以直接用this*/  
  37.         btnPrev.setOnClickListener(this);  
  38.         btnNext.setOnClickListener(this);  
  39.     }  
  40.     /*因为实现了接口,需要实现接口中未实现的方法*/  
  41.       public void onClick(View v) {  
  42.            switch(v.getId()){  
  43.            case R.id.next:  
  44.                  index++;  
  45.                  if(index>=images.length){  
  46.                       index = 0;  
  47.                  }  
  48.                  is.setImageResource(images[index]);  
  49.                  break;  
  50.            case R.id.pre:  
  51.                  index--;  
  52.                  if(index<0){  
  53.                       index = images.length - 1;  
  54.                  }  
  55.                  is.setImageResource(images[index]);  
  56.                  break;  
  57.            default:  
  58.                  break;  
  59.            }  
  60.       }  
  61.       /** 
  62.        * 该方法返回一个View的实例 
  63.        * 这个实例就是要在ImageSwitcher中所显示的 
  64.        * 此处就用ImageView来显示内容 
  65.        * 所以直接返回一个新的ImageView的实例 
  66.        */  
  67.       public View makeView() {  
  68.            return new ImageView(this);  
  69.       }  
  70. }               

       以上代码中需要注意的是:
                  1. 本类实现了两个接口,于是在类中就要实现这两个接口中的方法,而这样写的好处在于:
                    便于重用,之后的代码中在需要用到这两个接口的地方,可以直接用this关键字。
                2.images作为一个整型数组静态常量,里面存放的,是所有图片的ID,这需要将图片复制
                    到res目录下的drawable目录下。
                3.setFactory()方法告诉系统,ImageSwitcher要以什么样子来显示内容,而setImageSource()
                    则告诉系统,要显示的那些图片从哪里获得。
                4. makeView()方法是ViewFactory接口定义的方法,该方法返回一个View,而ImageSwitcher
                    就会按照这个View的布局来显示内容。

               好了一个简单的图片浏览器就算完成了!

http://www.ngui.cc/zz/2762649.html

相关文章

Android 不能退出的解释(android.os.Process.killProcess(android.os.Process.myPid()))

为什么要写这篇文章&#xff1f; 因为网上有很多种退出方法&#xff0c;可是实际上很多方法都不通用&#xff08;在某个版本下可用&#xff0c;到了另一个版本就不行&#xff09;&#xff0c;或者方法的实际效果根本就和其描述不符&#xff08;也不知道那些发帖的人测没测试过…

在 rest 风格 url 资源中, GET/POST/PUT/DELETE 等方法各有什么作用与区别?

在spring mvc 中&#xff1a; spring mvc 支持REST风格的请求方法&#xff0c;GET、POST、PUT和DELETE四种请求方法分别代表了数据库CRUD中的select、insert、update、delete 如何这个地方不懂&#xff0c;可以看http://blog.csdn.net/u011630575/article/details/50550127 &a…

android:正在运行的某个android程序中进行编写内容,按home键之后退回到桌面,在次点击程序图标避免再次重新启动程序解决办法

正在运行的android程序&#xff0c;按home键之后退回到桌面&#xff0c;在次点击程序图标避免再次重新启动程序解决办法。 情景描述&#xff1a;正在一个界面进行编辑工作&#xff0c;突然来一条短信&#xff0c;点击通知读取短信&#xff0c;然后重新点击App&#xff0c;进入原…

Android Context上下文(几种的对比,应用场景)

1、Context概念 其实一直想写一篇关于Context的文章&#xff0c;但是又怕技术不如而误人子弟&#xff0c;于是参考了些资料&#xff0c;今天准备整理下写出来&#xff0c;如有不足&#xff0c;请指出&#xff0c;参考资料会在醒目地方标明。 Context&#xff0c;相信不管是第一…

mysql查询(同一个表中相邻的两条记录进行运算)

通过添加一条行记录的方法&#xff0c;重新生成一个表&#xff0c;然后在通过可以通过表的连接进行运算。 --通过一个初始值为0的变量rownum&#xff0c;依次递增1来实现行号 SELECTrownum:rownum1 AS rownum,name FROM temp,(SELECT rownum:0) temp WHERE rownum<4&#xf…

mysql 利用自增数据项的方法,对同一个表有某种关联的数据进行处理。(利用增加一项的方法)

问题背景&#xff1a; stage表有app_id,stage_id,submission_time等数据项。要求对该表的指定app_id的所有stage_id &#xff0c;按submission_time 从小到大排序&#xff0c;并且相邻的两项进行做差。 另一个描述如下&#xff1a; 对同一个app_id的所有stage_id&#xff0c;按…

git的 .gitignore 如何配置(git如何忽略、追踪文件)

.gitignore 配置文件用于配置不需要加入版本管理的文件&#xff0c;配置好该文件可以为我们的版本管理带来很大的便利&#xff0c; 以下是个人对于配置 .gitignore 的一些心得。 1、配置语法&#xff1a; 以斜杠“/”开头表示目录&#xff1b; 以星号“*”通配多个字符&#xf…

Running migrations: No migrations to apply.(django不能创建数据库中的表的问题)

第一步&#xff1a; 删除该app名字下的migrations下的__init__.py等文件。 第二步&#xff1a; 进入数据库&#xff0c;找到django_migrations的表&#xff0c;删除该app名字的所有记录。 第三步&#xff1a;执行下面这两条命令&#xff1a;&#xff08;在项目目录下&#xf…

Django数据库查询相关

一旦数据模型创建完毕,自然会有存取数据的需要. 本文档介绍了由models衍生而来的数据库抽象API,及如何创建,得到及更新对象. 贯穿本参考, 我们都会引用下面的民意测验(Poll)应用程序: class Poll(models.Model): slug models.SlugField(unique_for_monthpub_date) question…

js中return、return true、return false的区别

一、返回控制与函数结果&#xff0c; 语法为&#xff1a;return 表达式;语句结束函数执行&#xff0c;返回调用函数&#xff0c;而且把表达式的值作为函数的结果。 二、返回控制&#xff0c;无函数结果&#xff0c;语法为&#xff1a;return;在大多数情况下,为事件处理函数返回…