ViewFlipper(多图层控件)及手势识别,代码创建动画效果

layout

 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     <LinearLayout
 8         android:visibility="gone"
 9         android:layout_width="fill_parent"
10         android:layout_height="wrap_content"
11         android:orientation="horizontal" >
12 
13         <Button
14             android:layout_width="0dip"
15             android:onClick="pre"
16             android:layout_height="wrap_content"
17             android:layout_weight="1"
18             android:text="上一个" />
19 
20         <Button
21             android:layout_width="0dip"
22             android:onClick="next"
23             android:layout_height="wrap_content"
24             android:layout_weight="1"
25             android:text="下一个" />
26     </LinearLayout>
27 
28     <ViewFlipper
29         android:id="@+id/vf"
30         android:layout_width="fill_parent"
31         android:layout_height="fill_parent" >
32     </ViewFlipper>
33 
34 </LinearLayout>

Activity

  1 package cn.itcast.image;
  2 
  3 import java.io.File;
  4 
  5 import android.app.Activity;
  6 import android.app.ProgressDialog;
  7 import android.net.Uri;
  8 import android.os.Bundle;
  9 import android.os.Environment;
 10 import android.os.Handler;
 11 import android.os.Message;
 12 import android.view.GestureDetector;
 13 import android.view.MotionEvent;
 14 import android.view.View;
 15 import android.view.animation.Animation;
 16 import android.view.animation.AnimationUtils;
 17 import android.widget.ImageView;
 18 import android.widget.TextView;
 19 import android.widget.ViewFlipper;
 20 
 21 public class DemoActivity extends Activity {
 22     private ViewFlipper vf;
 23     private GestureDetector mGestureDetector;
 24     private ProgressDialog pd;
 25     private Handler handler = new Handler(){
 26         public void handleMessage(android.os.Message msg) {
 27             ImageView iv  =  (ImageView) msg.obj;
 28             vf.addView(iv);
 29         };
 30     };
 31     @Override
 32     public void onCreate(Bundle savedInstanceState) {
 33         super.onCreate(savedInstanceState);
 34         setContentView(R.layout.main);
 35         vf = (ViewFlipper) findViewById(R.id.vf);
 36         pd = new ProgressDialog(this);
 37         pd.setMessage("正在加载图片信息");
 38         // 创建手势识别器.
 39         mGestureDetector = new GestureDetector(
 40                 new GestureDetector.SimpleOnGestureListener() {
 41 
 42                     // 手指在屏幕上滑动的时候 调用的方法.
 43                     // e1 手指第一次接触到屏幕的时候 对应的事件
 44                     // e2 手指离开屏幕的时候 对应的事件
 45                     // velocityx 水平方向的移动速度
 46                     @Override
 47                     public boolean onFling(MotionEvent e1, MotionEvent e2,
 48                             float velocityX, float velocityY) {
 49                         if (Math.abs(e1.getY() - e2.getY()) > 100) {
 50                             System.out.println("垂直方向移动过大");
 51                             return true;
 52                         }
 53 
 54                         if (Math.abs(velocityX) < 100) {
 55                             System.out.println("滑动的太慢了...");
 56                             return true;
 57                         }
 58                         if (e2.getX() - e1.getX() > 100) {
 59                             Animation inAnimation = AnimationUtils.loadAnimation(DemoActivity.this, R.anim.alpha_in);
 60                             Animation outAnimation = AnimationUtils.loadAnimation(DemoActivity.this, R.anim.alpha_out);
 61                             vf.setInAnimation(inAnimation);
 62                             vf.setOutAnimation(outAnimation);
 63                             vf.showPrevious();
 64                             return true;
 65                         }
 66                         if (e1.getX() - e2.getX() > 100) {
 67                             Animation inAnimation = AnimationUtils.loadAnimation(DemoActivity.this, R.anim.tran_in);
 68                             Animation outAnimation = AnimationUtils.loadAnimation(DemoActivity.this, R.anim.tran_out);
 69                             vf.setInAnimation(inAnimation);
 70                             vf.setOutAnimation(outAnimation);
 71                             vf.showNext();
 72                             return true;
 73                         }
 74                         return super.onFling(e1, e2, velocityX, velocityY);
 75                     }
 76 
 77                 });
 78         pd.show();
 79         new Thread() {
 80             public void run() {
 81                 File file = Environment.getExternalStorageDirectory();
 82 
 83                 File[] files = file.listFiles();
 84                 for (File f : files) {
 85                     if (f.isFile() && f.getName().endsWith("jpg")) {
 86                         ImageView iv = new ImageView(DemoActivity.this);
 87                         iv.setImageURI(Uri.fromFile(f));
 88                         Message msg = Message.obtain();
 89                         msg.obj = iv;
 90                         handler.sendMessage(msg);
 91                     }
 92                 }
 93                 pd.dismiss();
 94             };
 95         }.start();
 96 
 97     }
 98 
 99     @Override
100     public boolean onTouchEvent(MotionEvent event) {
101 
102         mGestureDetector.onTouchEvent(event);// 使用手势识别器 识别当前的手势
103 
104         return super.onTouchEvent(event);
105     }
106 
107     public void next(View view) {
108         vf.showNext();
109     }
110 
111     public void pre(View view) {
112         vf.showPrevious();
113     }
114 }
动画效果的.xml文件

alpha_in.xml

1 <?xml version="1.0" encoding="utf-8"?>
2 <alpha xmlns:android="http://schemas.android.com/apk/res/android"
3     android:duration="500"
4     android:fromAlpha="0.0"
5     android:toAlpha="1.0" >
6 
7 </alpha>


alpha_out.xml

1 <?xml version="1.0" encoding="utf-8"?>
2 <alpha xmlns:android="http://schemas.android.com/apk/res/android"
3     android:duration="500"
4     android:fromAlpha="0.0"
5     android:toAlpha="1.0" >
6 
7 </alpha>


tran_in.xml

1 <?xml version="1.0" encoding="utf-8"?>
2 <translate  xmlns:android="http://schemas.android.com/apk/res/android"
3     android:fromXDelta="100%p"
4     android:toXDelta="0"
5     android:fromYDelta="0"
6     android:toYDelta="0"
7     android:duration="800"
8     >
9 </translate>

tran_out.xml

1 <?xml version="1.0" encoding="utf-8"?>
2 <translate  xmlns:android="http://schemas.android.com/apk/res/android"
3     android:fromXDelta="0"
4     android:toXDelta="-100%p"
5     android:fromYDelta="0"
6     android:toYDelta="0"
7     android:duration="800"
8     >
9 </translate>

 

 

 

 

 

 

转载于:https://www.cnblogs.com/developer-wang/archive/2013/01/19/2868002.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值