zoukankan      html  css  js  c++  java
  • Android控件之ImageSwticher

    Android控件之ImageSwticher


    1. ImageSwticher介绍

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


    2. 应用示例

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

    package com.skywang.control;
    
    import android.app.Activity;
    import android.content.Context;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.view.View;
    import android.view.ViewGroup;
    import android.view.Window;
    import android.view.animation.AnimationUtils;
    import android.widget.ImageSwitcher;
    import android.widget.ImageView;
    import android.widget.RelativeLayout.LayoutParams;
    import android.widget.ViewSwitcher.ViewFactory;
    
    public class ImageSwitcherTest extends Activity implements ViewFactory {
        
        private ImageSwitcher mSwitcher;
    
        // 图片数组,用于在ImageSwitcher中切换
        private Integer[] mImageIds = { R.drawable.pic1,
                R.drawable.pic2, R.drawable.pic3, R.drawable.pic4 };
        // 图片显示序号
        private int mIndex = 0;
        private ImageSwitchThread mImgThread;
        
        private static final int MSG_SWITCH_IMG = 0x00000001;
        private Handler mHandler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                switch (msg.what) {
                    case MSG_SWITCH_IMG: {
                        mIndex = (mIndex + 1) % mImageIds.length;
                        mSwitcher.setImageResource(mImageIds[mIndex]);
                        break;    
                    }
                    default:
                        break;
                }
            }
        };
        
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            setContentView(R.layout.image_switcher_test);        
            setTitle("ImageShowActivity");
    
            mIndex = 0;
            mSwitcher = (ImageSwitcher) findViewById(R.id.ImageSwitcher01);
            // setFactory的具体实现参考makeView
            mSwitcher.setFactory(this);    
            // 设置ImageSwitcher移入图片时的动画效果
            mSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,
                    android.R.anim.slide_in_left));
            // 设置ImageSwitcher移除图片时的动画效果
            mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,
                    android.R.anim.slide_out_right));
            
            mImgThread = new ImageSwitchThread();        
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            if (mImgThread != null)
                mImgThread.start();
        }
        @Override
        protected void onPause() {
            super.onPause();
            if (mImgThread != null)
                mImgThread.interrupt();
        }
        
        @Override
        public void onDestroy() {
            super.onDestroy();
        }
    
        /*
         * makeView()返回的view将被添加到ImageSwitcher中。
         * 也就意味着,第一次若没有设置ImageSwitcher的背景,makeView()的返回值,将作为默认背景。
         * @author skywang
         */
        @Override
        public View makeView() {
            ImageView i = new ImageView(this);
            i.setBackgroundColor(0xFF000000);
            i.setScaleType(ImageView.ScaleType.FIT_CENTER);
            i.setLayoutParams(new ImageSwitcher.LayoutParams(
                    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
            return i;
        }
    
        /**
         * 图片更新线程。每5秒更新一次图片
         * @author skywang
         *
         */
        private class ImageSwitchThread extends Thread {
            @Override
            public void run() {
                super.run();
                try {
                    while (!isInterrupted()) {
                        // 发送消息给mHanlder更换图片
                        mHandler.sendEmptyMessage(MSG_SWITCH_IMG);
                        Thread.sleep(5000);
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    说明:
    (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中的图片。

    点击下载:源代码

    效果图:

  • 相关阅读:
    用JSP实现的商城购物车模块
    PHP Filesystem 函数(文件系统函数)(每日一课的内容可以从php参考手册上面来)
    PHP unlink() 函数(删除文件)
    $_SERVER['DOCUMENT_ROOT']
    thinkphp模型事件(钩子函数:模型中在增删改等操作前后自动执行的事件)
    php实现字符串替换
    js私有变量
    js模仿块级作用域(js没有块级作用域私有作用域)
    unity 3d开发的大型网络游戏
    thinkphp5项目--企业单车网站(八)(文章板块要点)(删除图片)
  • 原文地址:https://www.cnblogs.com/skywang12345/p/3165445.html
Copyright © 2011-2022 走看看