Android控件之ImageSwticher


1. ImageSwticher介绍

ImageSwitcher是图片切换的控件,它能实现图片切换时的动画效果,包括图片导入效果、图片消失效果等等。Android系统提供了许多不同的动画效果供我们选择。


2. 应用示例

示例说明:新建一个activity,包括一个ImageSwitcher控件。ImageSwitcher中的图片,每5秒钟变换一个。
代码说明

  1. package com.skywang.control;
  2.  
  3. import android.app.Activity;
  4. import android.content.Context;
  5. import android.os.Bundle;
  6. import android.os.Handler;
  7. import android.os.Message;
  8. import android.view.View;
  9. import android.view.ViewGroup;
  10. import android.view.Window;
  11. import android.view.animation.AnimationUtils;
  12. import android.widget.ImageSwitcher;
  13. import android.widget.ImageView;
  14. import android.widget.RelativeLayout.LayoutParams;
  15. import android.widget.ViewSwitcher.ViewFactory;
  16.  
  17. public class ImageSwitcherTest extends Activity implements ViewFactory {
  18.  
  19. private ImageSwitcher mSwitcher;
  20.  
  21. // 图片数组,用于在ImageSwitcher中切换
  22. private Integer[] mImageIds = { R.drawable.pic1,
  23. R.drawable.pic2, R.drawable.pic3, R.drawable.pic4 };
  24. // 图片显示序号
  25. private int mIndex = 0;
  26. private ImageSwitchThread mImgThread;
  27.  
  28. private static final int MSG_SWITCH_IMG = 0x00000001;
  29. private Handler mHandler = new Handler() {
  30. @Override
  31. public void handleMessage(Message msg) {
  32. switch (msg.what) {
  33. case MSG_SWITCH_IMG: {
  34. mIndex = (mIndex + 1) % mImageIds.length;
  35. mSwitcher.setImageResource(mImageIds[mIndex]);
  36. break;
  37. }
  38. default:
  39. break;
  40. }
  41. }
  42. };
  43.  
  44. @Override
  45. public void onCreate(Bundle savedInstanceState) {
  46. super.onCreate(savedInstanceState);
  47. requestWindowFeature(Window.FEATURE_NO_TITLE);
  48. setContentView(R.layout.image_switcher_test);
  49. setTitle("ImageShowActivity");
  50.  
  51. mIndex = 0;
  52. mSwitcher = (ImageSwitcher) findViewById(R.id.ImageSwitcher01);
  53. // setFactory的具体实现参考makeView
  54. mSwitcher.setFactory(this);
  55. // 设置ImageSwitcher移入图片时的动画效果
  56. mSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,
  57. android.R.anim.slide_in_left));
  58. // 设置ImageSwitcher移除图片时的动画效果
  59. mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,
  60. android.R.anim.slide_out_right));
  61.  
  62. mImgThread = new ImageSwitchThread();
  63. }
  64.  
  65. @Override
  66. protected void onResume() {
  67. super.onResume();
  68. if (mImgThread != null)
  69. mImgThread.start();
  70. }
  71. @Override
  72. protected void onPause() {
  73. super.onPause();
  74. if (mImgThread != null)
  75. mImgThread.interrupt();
  76. }
  77.  
  78. @Override
  79. public void onDestroy() {
  80. super.onDestroy();
  81. }
  82.  
  83. /*
  84. * makeView()返回的view将被添加到ImageSwitcher中。
  85. * 也就意味着,第一次若没有设置ImageSwitcher的背景,makeView()的返回值,将作为默认背景。
  86. * @author skywang
  87. */
  88. @Override
  89. public View makeView() {
  90. ImageView i = new ImageView(this);
  91. i.setBackgroundColor(0xFF000000);
  92. i.setScaleType(ImageView.ScaleType.FIT_CENTER);
  93. i.setLayoutParams(new ImageSwitcher.LayoutParams(
  94. LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
  95. return i;
  96. }
  97.  
  98. /**
  99. * 图片更新线程。每5秒更新一次图片
  100. * @author skywang
  101. *
  102. */
  103. private class ImageSwitchThread extends Thread {
  104. @Override
  105. public void run() {
  106. super.run();
  107. try {
  108. while (!isInterrupted()) {
  109. // 发送消息给mHanlder更换图片
  110. mHandler.sendEmptyMessage(MSG_SWITCH_IMG);
  111. Thread.sleep(5000);
  112. }
  113. } catch (InterruptedException e) {
  114. e.printStackTrace();
  115. }
  116. }
  117. }
  118. }

说明:
(01) mSwitcher.setFactory(this); setFactory()的作用是设置ImageSwitcher切换时,用于填充的两个视图。具体的实现是通过makeView()来实现的。
(02) mSwitcher.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.slide_in_left)); 这是来设置ImageSwitcher显示图片时的动画效果,android.R.anim.slide_in_left是android自带的动画效果,即图片显示时,从左边逐渐显示。
(03) mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.slide_out_right)); 这是来设置ImageSwitcher图片消失时的动画效果,android.R.anim.slide_out_right是android自带的动画效果,即图片消失时,从右边逐渐消失。
(04) mImgThread = new ImageSwitchThread(); 用于创建线程,线程ImageSwitchThread的作用是每隔5秒发送消息来更新ImageSwitcher中的图片。

点击下载:源代码

效果图:

Android控件之ImageSwticher的更多相关文章

  1. [Android Pro] android控件ListView顶部或者底部也显示分割线

    reference to  :  http://blog.csdn.net/lovexieyuan520/article/details/50846569 在默认的Android控件ListView在 ...

  2. Android控件Gridview实现仿支付宝首页,Fragment底部按钮切换和登录圆形头像

    此案例主要讲的是Android控件Gridview(九宫格)完美实现仿支付宝首页,包含添加和删除功能:Fragment底部按钮切换的效果,包含四个模块,登录页面圆形头像等,一个小项目的初始布局. 效果 ...

  3. Android 控件架构及View、ViewGroup的测量

    附录:示例代码地址 控件在Android开发的过程中是必不可少的,无论是我们在使用系统控件还是自定义的控件.下面我们将讲解一下Android的控件架构,以及如何实现自定义控件. 1.Android控件 ...

  4. Android - 控件android:ems属性

    Android - 控件android:ems属性http://blog.csdn.net/caroline_wendy/article/details/41684255?utm_source=tui ...

  5. Android 控件知识点,

    一.Android控件具有visibility属性,可以取三个值:visible(默认值)可见,invisible(不可见,但仍然占据原有的位置和大小,可以看做是变得透明了),gone(空间不仅不可见 ...

  6. UIAutomator定位Android控件的方法

    UIAutomator各种控件定位的方法. 1. 背景 使用SDK自带的NotePad应用,尝试去获得在NotesList那个Activity里的Menu Options上面的那个Add note菜单 ...

  7. 从Android系统出发,分析Android控件构架

    从Android系统出发,分析Android控件构架 Android中所有的控件追溯到根源,就是View 和ViewGroup,相信这个大家都知道,但是大家也许会不太清楚它们之间的具体关系是什么,在A ...

  8. Android控件系列之RadioButton&RadioGroup(转)

    学习目的: 1.掌握在Android中如何建立RadioGroup和RadioButton 2.掌握RadioGroup的常用属性 3.理解RadioButton和CheckBox的区别 4.掌握Ra ...

  9. 第三个 android控件

    android控件以及控件对应的属性:

随机推荐

  1. STS热部署,springboot项目中修改代码不用重新启动服务

    方法如下: 1.在pom文件中引入  devtools  依赖: <dependency> <groupId>org.springframework.boot</grou ...

  2. 006_mac osx 应用跨屏幕

    一般情况下 mac osx 中一个应用程序只能在一个屏幕上显示,作为从 windows 转过来的用户有点不太习惯,Goolge 后发现还是有解决方案的(虽然不是很好用). 打开 Mac 的系统偏好设置 ...

  3. centos memcached

    2014年1月19日 16:58:37 memcached 是基于libevent事件监听功能的,所以要安装 libevent 和 libevent-devel 启动命令 ./memcached -d ...

  4. 【转】java comparator 升序、降序、倒序从源码角度理解

    原文链接:https://blog.csdn.net/u013066244/article/details/78997869 环境jdk:1.7+ 前言之前我写过关于comparator的理解,但是都 ...

  5. javascript-序列化,时间,eval,转义

    一:序列化 JSON.stringify(li) 将对象转字符串 JSON.parse(str1) 将字符串转对象 li=[11,22,33] [11, 22, 33] li [11, 22, 33] ...

  6. 玲珑OJ 1129 - 喵哈哈村的战斗魔法师丶坏坏い月

    1129 - 喵哈哈村的战斗魔法师丶坏坏い月 Time Limit:3s Memory Limit:256MByte Submissions:315Solved:71 DESCRIPTION 坏坏い月 ...

  7. CentOS 7.x 安装 Docker

    安装之前确保之前没有安装过docker为此首先删除存在的docker程序 sudo yum remove docker \ docker-common \ docker-selinux \ docke ...

  8. Java中public、protected、default和private的区别

    public: 具有最大的访问权限,可以访问任何一个在classpath下的类.接口.异常等.它往往用于对外的情况,也就是对象或类对外的一种接口的形式. protected: 主要的作用就是用来保护子 ...

  9. Qt判断网络是否在

    我们已知的网络连接有3种:拨号.使用局域网以及代理上网. 无论哪一种上网方式都可以判断网络是否畅通,借此,我们来做一个判断网络是否畅通(存在)的程序,新建一个基类为QWidget的工程,不要UI. 添 ...

  10. 有了这套flexible.js 移动端自适应方案,你就能在移动端的来去自如, (*^__^*)

    flexible.js 移动端自适应方案 一,flexible.js 的使用方式: github地址:https://github.com/amfe/lib-flexible 官方文档地址:https ...