您的位置:首页 > 移动开发 > Android开发

android 中的 ViewFlipper 的简单使用

2013-11-16 22:55 525 查看
前面说到了 Viewpager ,当然还有 除了 Viewpager 的 还有 ViewFilpper 和 ViewFlow

现在说下 ViewFipper 的简单使用,

首先说一下, ViewPager 继承 ViewGroup Viewpager 有自己的adapter 可以和 fragment ,view 各种配合 ,适合动态的 复杂的交互。

ViewFilpper 继承 ViewAnimation 这个呢,就适合一些简单的页面 比如引导,欢迎页面 那种的静态页面 比较适合。

看下效果图。





public class MainActivity extends Activity {
	
	private ViewFlipper      viewFlipper;
	private List<View>       views = new ArrayList<View>();
	private Timer  timer =new Timer();
	
	private LinearLayout  linear_all_point; // 存储点的容器
	private int offset;              // 位移量
	
	private ImageView curDot;
	private int nowPosition;          // 记录当前的位置
	private int  aa = 0;
	
	private Handler han  = new Handler(){
		public void handleMessage(android.os.Message msg) {
			if(aa!= 3){
				viewFlipper.showNext();
				moveCursorTo(aa);
				aa++;
				
			}
		
		};
	};
	
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		
		linear_all_point = (LinearLayout)this.findViewById(R.id.dot_contain);
		curDot = (ImageView) findViewById(R.id.cur_dot);
		
		viewFlipper = (ViewFlipper)this.findViewById(R.id.view_flipper);
		// 早堆假数据
		View v1 = LayoutInflater.from(this).inflate(R.layout.aa1, null);
	//	v1.setId(1);
		View v2 = LayoutInflater.from(this).inflate(R.layout.aa2, null);
	//	v2.setId(2);
		View v3 = LayoutInflater.from(this).inflate(R.layout.aa3, null);
	//	v3.setId(3);
		views.add(v1);
		views.add(v2);
		views.add(v3);
		
		
		for (int i = 0; i < views.size(); i++) {
			viewFlipper.addView(views.get(i));
		}
		Animation inAnimation =  AnimationUtils.loadAnimation(this, R.anim.right_in);
		Animation outAnimation =  AnimationUtils.loadAnimation(this, R.anim.left_out);
		
		// animation 里面得到当前的View 然后改变引导界面下面的指示器图片
		outAnimation.setAnimationListener(new AnimationListener(){
			@Override
			public void onAnimationStart(Animation animation) {
				System.out.println("start= =================");
				// 这里是 左边图片自动划出去的时候  animation start 调用 
			}
			
			@Override
			public void onAnimationRepeat(Animation animation) {
				
			}
			
			@Override
			public void onAnimationEnd(Animation animation) {
				System.out.println("viewFlipper.getCurrentView().getId()=="+ viewFlipper.getCurrentView().getId());
			}
		});
		
		
		viewFlipper.setInAnimation(inAnimation);  
        viewFlipper.setOutAnimation(outAnimation);  
		
       // 一些方法
       // viewFlipper.startFlipping();      开始滑动
       // viewFlipper.stopFlipping();       停止滑动
       // viewFlipper.showNext();           下一个
       // viewFlipper.showPrevious();       上一个
       // viewFlipper.isFlipping();
       // viewFlipper.isAutoStart();
        /**
         * 1. 设置自动播放功能  这个注掉了  我用的是定时器,自动播放的话 在上面的
         * 
         *   onAnimationStart  中 切换指示器的图片就好了
         * 
         *    viewFlipper.setAutoStart(true);		
	     *    viewFlipper.setFlipInterval(3000); //隔3秒  
         * 
         * 
         */
     
	      //初始化点 每个底部小点的指示器 
			for(int i=0; i< views.size() ; i++){
				ImageView dotView = new ImageView(this);
				dotView.setImageResource(R.drawable.dot1_w);
				dotView.setLayoutParams(new LinearLayout.LayoutParams(
						ViewGroup.LayoutParams.WRAP_CONTENT,
						ViewGroup.LayoutParams.WRAP_CONTENT,1.0f));
				linear_all_point.addView(dotView);
			}
        
        
			//当curDot的所在的树形层次将要被绘出时此方法被调用
		    curDot.getViewTreeObserver().addOnPreDrawListener(
				new OnPreDrawListener() {
					public boolean onPreDraw() {
						// 获取ImageView的宽度也就是点图片的宽度
						offset = curDot.getWidth();
						return true;
					}
			});
	    
        
		   /**  
		    * 2.  还可以用 定时器 控制自动滑动  这个和 handler配合 然后更改指示器
		    */
			timer.schedule(new TimerTask() {
				@Override
				public void run() {
					han.sendMessage(new Message());
				}
			}, 1 , 2000);

		
      }

	
	//指示器 移动
	private void moveCursorTo(int position) {
		AnimationSet animationSet = new AnimationSet(true);
		TranslateAnimation tAnim = new TranslateAnimation(offset* nowPosition, offset * position, 0, 0);
		animationSet.addAnimation(tAnim);
		animationSet.setDuration(10);
		animationSet.setFillAfter(true);
		curDot.startAnimation(animationSet);
	}
	

}


animation

right_in 和 left_out 配合 (右边的图片进来,现在的图片 往左边出去 - -)

首先,right_in

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="1500"
        android:fromXDelta="100%p"
        android:toXDelta="0" />
    <alpha
        android:duration="1500"
        android:fromAlpha="0.1"
        android:toAlpha="1.0" />
</set>


left_out

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="1500"
        android:fromXDelta="0"
        android:toXDelta="-100%p" />

    <alpha
        android:duration="1500"
        android:fromAlpha="1.0"
        android:toAlpha="0.1" />
</set>


left_in 和 right_out 配合 (向右边滑动的时候, 左边的图片进来 ,现在的图片从右边出去)

首先,left_in

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="1500"
        android:fromXDelta="-100%p"
        android:toXDelta="0" />

    <alpha
        android:duration="1500"
        android:fromAlpha="0.1"
        android:toAlpha="1.0" />
</set>


right_out

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="1500"
        android:fromXDelta="0"
        android:toXDelta="100%p" />

    <alpha
        android:duration="1500"
        android:fromAlpha="1.0"
        android:toAlpha="0.1" />
</set>


xml。指示器那个也是从 前面说的 viewpager中复制过来的

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

     <ViewFlipper  
        android:id="@+id/view_flipper"  
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent"
        />    
     <FrameLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:gravity="center" 
        android:layout_marginBottom="22.0dip">
        <LinearLayout
            android:id="@+id/dot_contain"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:orientation="horizontal" >           
        </LinearLayout>

        <ImageView
            android:id="@+id/cur_dot"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/dot2_w" />
 
    </FrameLayout>
</RelativeLayout>


好了,就是这些了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: