Android实战简易教程<十二>(ViewFlipper实现幻灯效果)

来源:互联网 发布:永宏fb编程电缆制作 编辑:程序博客网 时间:2024/06/06 02:51

直接看代码

1.MainActivity.java:

[java] view plaincopy
  1. package org.yayun.demo;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.view.GestureDetector;  
  6. import android.view.MotionEvent;  
  7. import android.view.ViewGroup.LayoutParams;  
  8. import android.view.animation.Animation;  
  9. import android.view.animation.AnimationUtils;  
  10. import android.widget.ImageView;  
  11. import android.widget.ViewFlipper;  
  12.   
  13. public class MainActivity extends Activity implements  
  14.         android.view.GestureDetector.OnGestureListener {  
  15.   
  16.     private int[] imgs = { R.drawable.img1, R.drawable.img2, R.drawable.img3 };  
  17.     private GestureDetector gestureDetector;  
  18.     private ViewFlipper viewFlipper;  
  19.     private Activity mActivity;  
  20.   
  21.     @Override  
  22.     protected void onCreate(Bundle savedInstanceState) {  
  23.         super.onCreate(savedInstanceState);  
  24.         setContentView(R.layout.activity_main);  
  25.         mActivity = this;  
  26.         viewFlipper = (ViewFlipper) findViewById(R.id.viewflipper);  
  27.   
  28.         gestureDetector = new GestureDetector(this);//手势监听  
  29.   
  30.         for (int i = 0; i < imgs.length; i++) { // 添加图片源  
  31.             ImageView iv = new ImageView(this);  
  32.             iv.setImageResource(imgs[i]);  
  33.             iv.setScaleType(ImageView.ScaleType.FIT_XY);  
  34.             viewFlipper.addView(iv, new LayoutParams(LayoutParams.FILL_PARENT,  
  35.                     LayoutParams.FILL_PARENT));  
  36.         }  
  37.   
  38.         viewFlipper.setAutoStart(true); // 设置自动播放功能(点击事件,前自动播放)  
  39.         viewFlipper.setFlipInterval(3000);//间隔3秒  
  40.         if (viewFlipper.isAutoStart() && !viewFlipper.isFlipping()) {  
  41.             viewFlipper.startFlipping();  
  42.         }  
  43.     }  
  44.   
  45.     @Override  
  46.     public boolean onTouchEvent(MotionEvent event) {  
  47.         // TODO Auto-generated method stub  
  48.         viewFlipper.stopFlipping(); // 点击事件后,停止自动播放  
  49.         viewFlipper.setAutoStart(false);  
  50.         return gestureDetector.onTouchEvent(event); // 注册手势事件  
  51.     }  
  52.   
  53.     public boolean onDown(MotionEvent arg0) {  
  54.         // TODO Auto-generated method stub  
  55.         return false;  
  56.     }  
  57.   
  58.     public boolean onFling(MotionEvent e1, MotionEvent e2, float arg2,  
  59.             float arg3) {  
  60.         if (e2.getX() - e1.getX() > 120) { // 从左向右滑动(左进右出)  
  61.             Animation rInAnim = AnimationUtils.loadAnimation(mActivity,  
  62.                 R.layout.push_right_in); // 向右滑动左侧进入的渐变效果(alpha 0.1 -> 1.0)  
  63.             Animation rOutAnim = AnimationUtils.loadAnimation(mActivity,  
  64.                     R.layout.push_right_out); // 向右滑动右侧滑出的渐变效果(alpha 1.0 -> 0.1)  
  65.   
  66.             viewFlipper.setInAnimation(rInAnim);  
  67.             viewFlipper.setOutAnimation(rOutAnim);  
  68.             viewFlipper.showPrevious();  
  69.             return true;  
  70.         } else if (e2.getX() - e1.getX() < -120) { // 从右向左滑动(右进左出)  
  71.             Animation lInAnim = AnimationUtils.loadAnimation(mActivity,  
  72.                     R.layout.push_left_in); // 向左滑动左侧进入的渐变效果(alpha 0.1 -> 1.0)  
  73.             Animation lOutAnim = AnimationUtils.loadAnimation(mActivity,  
  74.                     R.layout.push_left_out); // 向左滑动右侧滑出的渐变效果(alpha 1.0 -> 0.1)  
  75.   
  76.             viewFlipper.setInAnimation(lInAnim);  
  77.             viewFlipper.setOutAnimation(lOutAnim);  
  78.             viewFlipper.showNext();  
  79.             return true;  
  80.         }  
  81.         return true;  
  82.     }  
  83.   
  84.     public void onLongPress(MotionEvent arg0) {  
  85.         // TODO Auto-generated method stub  
  86.   
  87.     }  
  88.   
  89.     public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2,  
  90.             float arg3) {  
  91.         // TODO Auto-generated method stub  
  92.         return false;  
  93.     }  
  94.   
  95.     public void onShowPress(MotionEvent arg0) {  
  96.         // TODO Auto-generated method stub  
  97.   
  98.     }  
  99.   
  100.     public boolean onSingleTapUp(MotionEvent arg0) {  
  101.         // TODO Auto-generated method stub  
  102.         return false;  
  103.     }  
  104.   
  105. }  


2.active_main.xml:

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>    
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    
  3.     android:layout_width="fill_parent"    
  4.     android:layout_height="fill_parent"    
  5.     android:orientation="vertical" >    
  6.     
  7.     <ViewFlipper    
  8.         android:id="@+id/viewflipper"    
  9.         android:layout_width="fill_parent"    
  10.         android:layout_height="fill_parent"/>    
  11.     
  12. </LinearLayout>    


下面看四个动画文件,很简单.

1.push_left_in.xml

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>      
  2. <set xmlns:android="http://schemas.android.com/apk/res/android" >      
  3.     <translate      
  4.         android:duration="1500"      
  5.         android:fromXDelta="100%p"      
  6.         android:toXDelta="0" />  <!-- 位移   -->  
  7.       
  8.     <alpha      
  9.         android:duration="1500"      
  10.         android:fromAlpha="0.1"      
  11.         android:toAlpha="1.0" /> <!-- 渐变    -->  
  12. </set>   

2.push_left_out.xml

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>      
  2. <set xmlns:android="http://schemas.android.com/apk/res/android" >      
  3.     <translate      
  4.         android:duration="1500"      
  5.         android:fromXDelta="0"      
  6.         android:toXDelta="-100%p" />      
  7.       
  8.     <alpha      
  9.         android:duration="1500"      
  10.         android:fromAlpha="1.0"      
  11.         android:toAlpha="0.1" />      
  12. </set>     


3.push_right_in.xml

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>      
  2. <set xmlns:android="http://schemas.android.com/apk/res/android" >      
  3.     <translate      
  4.         android:duration="1500"      
  5.         android:fromXDelta="-100%p"      
  6.         android:toXDelta="0" />      
  7.       
  8.     <alpha      
  9.         android:duration="1500"      
  10.         android:fromAlpha="0.1"      
  11.         android:toAlpha="1.0" />      
  12. </set>    


4.push_right_out.xml

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>      
  2. <set xmlns:android="http://schemas.android.com/apk/res/android" >      
  3.     <translate      
  4.         android:duration="1500"      
  5.         android:fromXDelta="0"      
  6.         android:toXDelta="100%p" />      
  7.       
  8.     <alpha      
  9.         android:duration="1500"      
  10.         android:fromAlpha="1.0"      
  11.         android:toAlpha="0.1" />      
  12. </set>  

运行实例如下:

0 0
原创粉丝点击