我是
靠谱客的博主
淡然蜜蜂,最近开发中收集的这篇文章主要介绍
Android实现简单移动动画,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
本帖最后由 hellbus 于 2011-12-10 08:50 编辑
实现了根据手势滑动的简单动画,效果如下:
当手指在红色区域向左滑动时,播放控制条会随手势移动:
当手指在红色区域向右滑动时,播放控制条会随手势移出。说一下实现步骤:
程序目录结构:
页面布局文件main.xml如下:
-
- <relativelayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <textview
- android:id="@+id/title"
- android:layout_width="fill_parent"
- android:layout_height="50px"
- android:text="@string/hello"
- />
- <textview
- android:id="@+id/animation_text"
- android:layout_width="fill_parent"
- android:layout_height="61px"
- android:text="测试动画"
- android:layout_below="@id/title"
- android:layout_marginBottom="10px"
- android:background="@color/red"
- />
- <imageview android:id="@+id/imageViews"
- android:visibility="invisible"
- android:layout_width="fill_parent"
- android:layout_height="51px"
- android:src="@drawable/tt"/>
-
复制代码
布局采用了相对布局,需要注意的是android:visibility="invisible",这样ImageView就不会显示在界面中。MainActivity主要代码如下:
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- textView = (TextView) findViewById(R.id.animation_text);
- imageView =(ImageView) findViewById(R.id.imageViews);
- textView.setLongClickable(true);
- textView.setOnTouchListener(new OnTouchListener() {
- @Override
- public boolean onTouch(View v, MotionEvent event) {
- return gestureDetector.onTouchEvent(event);
- }
- });
- gestureDeal = new GestureDeal(imageView);
- gestureDetector=new GestureDetector(gestureDeal);
- }
复制代码
解释一下:
- textView.setOnTouchListener(new OnTouchListener() {
- @Override
- public boolean onTouch(View v, MotionEvent event) {
- return gestureDetector.onTouchEvent(event);
- }
- });
复制代码
给textView注册touch监听事件,同时将监听事件交由gestureDetector来处理。
- gestureDeal = new GestureDeal(imageView);
- gestureDetector=new GestureDetector(gestureDeal);
复制代码
这两句的意思是声明对touch事件的具体处理类GestureDeal,代码如下:
- public class GestureDeal implements OnGestureListener {
- private static final String TAG = "tag";
- private View view;
- private TranslateAnimation inAnimation, outAnimation;
- private boolean sign;
- public GestureDeal(View view) {
- this.view = view;
- inAnimation = new TranslateAnimation(0, 480, 50, 50);
- inAnimation.setDuration(20000);
- inAnimation.setFillBefore(true);
- inAnimation.setFillAfter(true);
- outAnimation = new TranslateAnimation(480, 0, 50, 50);
- outAnimation.setDuration(20000);
- outAnimation.setFillBefore(true);
- outAnimation.setFillAfter(true);
- }
- @Override
- public boolean onDown(MotionEvent arg0) {
- // TODO Auto-generated method stub
- return false;
- }
- //清扫
- @Override
- public boolean onFling(MotionEvent arg0, MotionEvent arg1, float arg2,
- float arg3) {
- // TODO Auto-generated method stub
- Log.v(TAG, "onFling>>>>x=" + arg2 + " y=" + arg3);
- if (arg2 < 0 && !sign) {
- this.view.startAnimation(outAnimation);
- sign = true;
- } else {
- if (sign && arg2 > 0) {
- this.view.startAnimation(inAnimation);
- sign = false;
- }
- }
- return false;
- }
- //长按
- @Override
- public void onLongPress(MotionEvent arg0) {
- // TODO Auto-generated method stub
- Log.v(TAG, "onLongPress>>>>");
- }
- //滑动
- @Override
- public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2,
- float arg3) {
- // TODO Auto-generated method stub
- Log.v(TAG, "onScroll>>>>x=" + arg2 + " y=" + arg3);
- return false;
- }
- //短按
- @Override
- public void onShowPress(MotionEvent arg0) {
- // TODO Auto-generated method stub
- Log.v(TAG, "onShowPress>>>>");
- }
- //点击
- @Override
- public boolean onSingleTapUp(MotionEvent arg0) {
- // TODO Auto-generated method stub
- Log.v(TAG, "onSingleTapUp>>>>");
- return false;
- }
- }
复制代码
GestureDeal 实现了OnGestureListener 接口,同时实现了OnGestureListener 的5个方法,分别表示不同的touch事件。构造方法
- public GestureDeal(View view) {
- this.view = view;
- inAnimation = new TranslateAnimation(0, 480, 50, 50);
- inAnimation.setDuration(20000);
- inAnimation.setFillBefore(true);
- inAnimation.setFillAfter(true);
- outAnimation = new TranslateAnimation(480, 0, 50, 50);
- outAnimation.setDuration(20000);
- outAnimation.setFillBefore(true);
- outAnimation.setFillAfter(true);
- }
复制代码
初始化了view的动画方式。
- new TranslateAnimation(480, 0, 50, 50);
复制代码
4个参数分别表示x轴起始位置,x轴终点位置,y轴起始位置,y轴终点位置。
表示动画持续时间,单位是毫秒。
- public boolean onFling(MotionEvent arg0, MotionEvent arg1, float arg2,
- float arg3) {
- // TODO Auto-generated method stub
- Log.v(TAG, "onFling>>>>x=" + arg2 + " y=" + arg3);
- if (arg2 < 0 && !sign) {
- this.view.startAnimation(outAnimation);
- sign = true;
- } else {
- if (sign && arg2 > 0) {
- this.view.startAnimation(inAnimation);
- sign = false;
- }
- }
- return false;
- }
复制代码
中arg2表示手势滑动时x轴的速度。由左向右是正值,由右向左是负值。
- this.view.startAnimation(outAnimation);
复制代码
最后
以上就是淡然蜜蜂为你收集整理的Android实现简单移动动画的全部内容,希望文章能够帮你解决Android实现简单移动动画所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复