我是靠谱客的博主 淡然蜜蜂,最近开发中收集的这篇文章主要介绍Android实现简单移动动画,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本帖最后由 hellbus 于 2011-12-10 08:50 编辑

实现了根据手势滑动的简单动画,效果如下:

当手指在红色区域向左滑动时,播放控制条会随手势移动:



当手指在红色区域向右滑动时,播放控制条会随手势移出。说一下实现步骤:

程序目录结构:

页面布局文件main.xml如下:



  1. <relativelayout xmlns:android="http://schemas.android.com/apk/res/android" 
  2.     android:orientation="vertical" 
  3.     android:layout_width="fill_parent" 
  4.     android:layout_height="fill_parent" 
  5.     > 
  6. <textview 
  7.     android:id="@+id/title" 
  8.     android:layout_width="fill_parent" 
  9.     android:layout_height="50px" 
  10.     android:text="@string/hello" 
  11.     /> 
  12. <textview 
  13.     android:id="@+id/animation_text" 
  14.     android:layout_width="fill_parent" 
  15.     android:layout_height="61px" 
  16.     android:text="测试动画" 
  17.     android:layout_below="@id/title" 
  18.     android:layout_marginBottom="10px" 
  19.     android:background="@color/red" 
  20.     /> 
  21. <imageview android:id="@+id/imageViews" 
  22.      android:visibility="invisible" 
  23.      android:layout_width="fill_parent" 
  24.      android:layout_height="51px" 
  25.      android:src="@drawable/tt"/> 
复制代码
布局采用了相对布局,需要注意的是android:visibility="invisible",这样ImageView就不会显示在界面中。MainActivity主要代码如下:

  1. public void onCreate(Bundle savedInstanceState) { 
  2.         super.onCreate(savedInstanceState); 
  3.         setContentView(R.layout.main); 
  4.         textView = (TextView) findViewById(R.id.animation_text); 
  5.         imageView =(ImageView) findViewById(R.id.imageViews); 
  6.         textView.setLongClickable(true); 
  7.         textView.setOnTouchListener(new OnTouchListener() { 
  8.             @Override 
  9.             public boolean onTouch(View v, MotionEvent event) { 
  10.                 return gestureDetector.onTouchEvent(event); 
  11.             } 
  12.         }); 
  13.         gestureDeal = new GestureDeal(imageView); 
  14.         gestureDetector=new GestureDetector(gestureDeal); 
  15.     }
复制代码
解释一下:

  1. textView.setOnTouchListener(new OnTouchListener() { 
  2.             @Override 
  3.             public boolean onTouch(View v, MotionEvent event) { 
  4.                 return gestureDetector.onTouchEvent(event); 
  5.             } 
  6.         });
复制代码
给textView注册touch监听事件,同时将监听事件交由gestureDetector来处理。

  1. gestureDeal = new GestureDeal(imageView); 
  2.         gestureDetector=new GestureDetector(gestureDeal);
复制代码
这两句的意思是声明对touch事件的具体处理类GestureDeal,代码如下:

  1. public class GestureDeal implements OnGestureListener {
  2.     private static final String TAG = "tag";
  3.     private View view;
  4.     private TranslateAnimation inAnimation, outAnimation;
  5.     private boolean sign;
  6.     public GestureDeal(View view) { 
  7.         this.view = view; 
  8.         inAnimation = new TranslateAnimation(0, 480, 50, 50); 
  9.         inAnimation.setDuration(20000); 
  10.         inAnimation.setFillBefore(true); 
  11.         inAnimation.setFillAfter(true);
  12.         outAnimation = new TranslateAnimation(480, 0, 50, 50); 
  13.         outAnimation.setDuration(20000); 
  14.         outAnimation.setFillBefore(true); 
  15.         outAnimation.setFillAfter(true); 
  16.     }
  17.     @Override 
  18.     public boolean onDown(MotionEvent arg0) { 
  19.         // TODO Auto-generated method stub 
  20.         return false; 
  21.     }
  22.     //清扫 
  23.     @Override 
  24.     public boolean onFling(MotionEvent arg0, MotionEvent arg1, float arg2, 
  25.             float arg3) { 
  26.         // TODO Auto-generated method stub 
  27.         Log.v(TAG, "onFling>>>>x=" + arg2 + "  y=" + arg3); 
  28.         if (arg2 < 0 && !sign) { 
  29.             this.view.startAnimation(outAnimation); 
  30.             sign = true; 
  31.         } else { 
  32.             if (sign && arg2 > 0) { 
  33.                 this.view.startAnimation(inAnimation); 
  34.                 sign = false; 
  35.             }
  36.         }
  37.         return false; 
  38.     }
  39.     //长按 
  40.     @Override 
  41.     public void onLongPress(MotionEvent arg0) { 
  42.         // TODO Auto-generated method stub 
  43.         Log.v(TAG, "onLongPress>>>>"); 
  44.     }
  45.     //滑动 
  46.     @Override 
  47.     public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2, 
  48.             float arg3) { 
  49.         // TODO Auto-generated method stub 
  50.         Log.v(TAG, "onScroll>>>>x=" + arg2 + "  y=" + arg3); 
  51.         return false; 
  52.     }
  53.     //短按 
  54.     @Override 
  55.     public void onShowPress(MotionEvent arg0) { 
  56.         // TODO Auto-generated method stub 
  57.         Log.v(TAG, "onShowPress>>>>"); 
  58.     }
  59.     //点击 
  60.     @Override 
  61.     public boolean onSingleTapUp(MotionEvent arg0) { 
  62.         // TODO Auto-generated method stub 
  63.         Log.v(TAG, "onSingleTapUp>>>>"); 
  64.         return false; 
  65.     } 
  66. }
复制代码
GestureDeal 实现了OnGestureListener 接口,同时实现了OnGestureListener 的5个方法,分别表示不同的touch事件。构造方法

  1. public GestureDeal(View view) { 
  2.         this.view = view; 
  3.         inAnimation = new TranslateAnimation(0, 480, 50, 50); 
  4.         inAnimation.setDuration(20000); 
  5.         inAnimation.setFillBefore(true); 
  6.         inAnimation.setFillAfter(true);
  7.         outAnimation = new TranslateAnimation(480, 0, 50, 50); 
  8.         outAnimation.setDuration(20000); 
  9.         outAnimation.setFillBefore(true); 
  10.         outAnimation.setFillAfter(true); 
  11.     }
复制代码
初始化了view的动画方式。

  1. new TranslateAnimation(480, 0, 50, 50);
复制代码
4个参数分别表示x轴起始位置,x轴终点位置,y轴起始位置,y轴终点位置。

  1. setDuration(20000);
复制代码
表示动画持续时间,单位是毫秒。

  1. public boolean onFling(MotionEvent arg0, MotionEvent arg1, float arg2, 
  2.             float arg3) { 
  3.         // TODO Auto-generated method stub 
  4.         Log.v(TAG, "onFling>>>>x=" + arg2 + "  y=" + arg3); 
  5.         if (arg2 < 0 && !sign) { 
  6.             this.view.startAnimation(outAnimation); 
  7.             sign = true; 
  8.         } else { 
  9.             if (sign && arg2 > 0) { 
  10.                 this.view.startAnimation(inAnimation); 
  11.                 sign = false; 
  12.             }
  13.         }
  14.         return false; 
  15.     }
复制代码
中arg2表示手势滑动时x轴的速度。由左向右是正值,由右向左是负值。

  1. this.view.startAnimation(outAnimation);
复制代码

最后

以上就是淡然蜜蜂为你收集整理的Android实现简单移动动画的全部内容,希望文章能够帮你解决Android实现简单移动动画所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部