Gallery + ImageSwitcher 兑现简单的电子相册

Gallery + ImageSwitcher 实现简单的电子相册

学习了一下android中的Gallery + ImageSwitcher,在网上找了点资料,做了个简单的电子相册。

 并实现了自动播放效果,通过双击的手势来开启关闭自动播放。上图才是王道。

Gallery + ImageSwitcher 兑现简单的电子相册



主要实现代码

package com.eebbk.elealbum.activity;

import android.app.Activity;
import android.content.Context;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.GestureDetector;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.ViewGroup.LayoutParams;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.ViewSwitcher.ViewFactory;

public class MainActivity extends Activity implements ViewFactory, OnItemSelectedListener, Runnable
{
	//自动播放的标志位
	private boolean isPlay = false;  
	//自动播放更新消息
	private final static int UPDATE = 1;
	//当前播放索引值
	private int cur_index = 0;
	// GestureDetector为手势识别类
	private GestureDetector mGestureDetector;
	
	private Gallery gallery = null;
	private ImageSwitcher imageSwitcher = null;
	
	private int[] imageIds =new int[]{  
            R.drawable.pic1 , R.drawable.pic2,  
            R.drawable.pic3 , R.drawable.pic4,  
            R.drawable.pic5 , R.drawable.pic6,  
            R.drawable.pic7 , R.drawable.pic8,  
    };
	
	private Handler handler = new Handler( ) 
	{
		@Override
		public void handleMessage( Message msg )
		{
			// TODO Auto-generated method stub
			if ( msg.what == UPDATE )
			{
				gallery.setSelection( msg.arg1 );
			}
			super.handleMessage( msg );
		}
	};

	
	/** Called when the activity is first created. */
	@Override
	public void onCreate( Bundle savedInstanceState )
	{
		super.onCreate( savedInstanceState );
		//设置无标题  
        requestWindowFeature(Window.FEATURE_NO_TITLE);  
        //设置全屏  
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,   
                WindowManager.LayoutParams.FLAG_FULLSCREEN);  
        
		setContentView( R.layout.main );
		init( );
	}
	
	private void init( )
	{
		mGestureDetector = new GestureDetector( new MySimpleGesture( ));
				
		gallery = ( Gallery ) findViewById( R.id.gallery_id );
		gallery.setAdapter(new ImageAdaper( this )); 
		gallery.setOnItemSelectedListener(this);  
		
		imageSwitcher = ( ImageSwitcher ) findViewById( R.id.imageSwitcher_id );
		imageSwitcher.setFactory( this );
		//设置淡入淡出切换效果
		imageSwitcher.setInAnimation( AnimationUtils.loadAnimation( this, android.R.anim.fade_in ) );
		imageSwitcher.setOutAnimation( AnimationUtils.loadAnimation( this, android.R.anim.fade_out ) );
		
	}

	
	@Override
	public boolean onTouchEvent( MotionEvent event )
	{
		// TODO Auto-generated method stub
		mGestureDetector.onTouchEvent( event );
		return super.onTouchEvent( event );
	}
	
	
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if(keyCode == KeyEvent.KEYCODE_BACK){
			isPlay = false;	
		}
		return super.onKeyDown(keyCode, event);
	}

	/* (non-Javadoc)
	 * @see android.widget.ViewSwitcher.ViewFactory#makeView()
	 */
	@Override
	public View makeView( )
	{
		// TODO Auto-generated method stub
		ImageView imageView = new ImageView(this);  
        imageView.setScaleType(imageView.getScaleType().FIT_CENTER);  
        imageView.setBackgroundColor(0xFF000000);  
        imageView.setLayoutParams(new ImageSwitcher.LayoutParams(LayoutParams.FILL_PARENT , LayoutParams.FILL_PARENT));    
        return imageView;
	}
	
	
	
	 public class ImageAdaper extends BaseAdapter{  
	        Context context;  
	        int mGalleryItemBackground;  
	        public ImageAdaper(Context context){  
	            this.context = context;  
	            TypedArray typedArray = obtainStyledAttributes(R.styleable.Gallery);  
	            mGalleryItemBackground = typedArray.getResourceId( R.styleable.Gallery_android_galleryItemBackground, 0);  
	            typedArray.recycle();
	        }  
	  
	          
	        public int getCount() {  
	            // TODO Auto-generated method stub  
	            return Integer.MAX_VALUE;  
	        }  
	  
	        public Object getItem(int position) {  
	            // TODO Auto-generated method stub  
	            return imageIds[position];  
	        }  
	  
	        public long getItemId(int position) {  
	            // TODO Auto-generated method stub  
	            return position;  
	        }  
	  
	        public View getView(int position, View convertView, ViewGroup parent) {  
	            // TODO Auto-generated method stub  
	            ImageView imageview = new ImageView(this.context);  
	            imageview.setImageResource(imageIds[position % imageIds.length]);  
	            imageview.setScaleType(ImageView.ScaleType.FIT_XY);  
	            imageview.setLayoutParams(new Gallery.LayoutParams(136 , 88));  
	            imageview.setBackgroundResource(mGalleryItemBackground);  
	            return imageview;   
	        }  
	          
	    }



	/* (non-Javadoc)
	 * @see android.widget.AdapterView.OnItemSelectedListener#onItemSelected(android.widget.AdapterView, android.view.View, int, long)
	 */
	@Override
	public void onItemSelected( AdapterView< ? > parent, View view, int position, long id )
	{
		//gallery选中一项之后,切换图片
		System.out.println("position: " + position + "cur_index: " +  cur_index);
		imageSwitcher.setImageResource(imageIds[position%imageIds.length]);  
	}

	/* (non-Javadoc)
	 * @see android.widget.AdapterView.OnItemSelectedListener#onNothingSelected(android.widget.AdapterView)
	 */
	@Override
	public void onNothingSelected( AdapterView< ? > parent )
	{
		// TODO Auto-generated method stub
		
	}

	/* (non-Javadoc)
	 * @see java.lang.Runnable#run()
	 */
	@Override
	public void run( )
	{
		// TODO Auto-generated method stub
		while(isPlay) 
		{
            //cur_index = cur_index % imageIds.length;  
            Message msg = handler.obtainMessage(UPDATE, cur_index, 0);  
            handler.sendMessage(msg);
            //更新时间间隔为 2s    
            try {  
                Thread.sleep(2000);  
            } catch (InterruptedException e) {  
                // TODO Auto-generated catch block   
                e.printStackTrace();  
            }  
            cur_index++; 
		}
	}
	
	
	private class MySimpleGesture extends SimpleOnGestureListener
	{
		// 按两下的第二下Touch down时触发
		public boolean onDoubleTap( MotionEvent e )
		{
			//双击触发切换自动播放
			if ( isPlay == false )
			{
				isPlay = true;
				new Thread( MainActivity.this).start( );
			}
			else 
			{
				isPlay = false;
			}
			
			return true;
		}
	}
 
}

源码附上:http://download.****.net/detail/tianmi1988/4914807