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中的图片。

点击下载:源代码

效果图:

Android控件之ImageSwticherAndroid控件之ImageSwticher

 

你可能感兴趣的:(android控件)