android开发之手势监听滑动以及点击事件从而实现动画的缩放平移效果

一直没时间把工作中遇到的的问题整理写成文章总结,不仅仅是自己后续可以用到,也可以给其他开发小伙伴提供帮助,后续会帮遇到的问题或者学习的心得整理放上去。

业务问题:需要用到手势的监听来实现动画的各种效果。比如左滑右滑来让某个动画进行放大1倍,向右平移多少多少的距离,亦或者实现多个动画同时进行展示。

一、手势监听
1、实现view.OnTouchListener

public class myApplication imlements implements View.OnTouchListener{
   @Override
   public boolean onTouch(View v, MotionEvent event) {
        //将监听事件用于手势监听处理
        return mGestureDetector.onTouchEvent(event);
    }
}

2、手势监听初始化

private GestureDetectorCompat mGestureDetector;

mGestureDetector = new GestureDetectorCompat(this, new gestureListener());
public class gestureListener implements GestureDetector.OnGestureListener {

    @Override
    public boolean onDown(MotionEvent e) {
        return false;
    }

    @Override
    public void onShowPress(MotionEvent e) {
    }

    @Override
    public boolean onSingleTapUp(MotionEvent e) {
        //动画生效
        gestureAnimationRight();    
        return false;
    }

    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
        return false;
    }

    @Override
    public void onLongPress(MotionEvent e) {
    }

    private int verticalMinDistance = 100;
    private int minVelocity = 0;

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        //动画生效
        gestureAnimationLeft();
        return false;
    }
}

二、动画效果

动画只放部分的代码,主要是解释动画的平移以及缩放的使用。其中动画还有很多效果未展示,比如动画循环播放,比如播放一次后回到初始点等等

AnimationSet set = new AnimationSet(false);
int big = (mRlayout1.getWidth() >= mRlayout2.getWidth()) ? mRlayout1.getWidth() : mRlayout2.getWidth();
//动画尺寸伸缩效果初始化
Animation animationtop = new ScaleAnimation(0.4f, 1.0f, 0.4f, 1.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
//该效果持续时间
animationtop.setDuration(1000);
set.addAnimation(animationtop);
//动画画面平移效果初始化
animationtop = new TranslateAnimation(20 - (int) (0.3 * big), circleOffsetWidth, 0, 0);
//该效果持续时间
animationtop.setDuration(1000);
set.addAnimation(animationtop);
//开始动画效果
mRlayout1.startAnimation(set);
//动画是否停留在动画结束的时间点
set.setFillAfter(true);

基本上了解了上述的用法,对于手势监听实现动画的效果基本没啥问题了。另外动画的使用可能会影响到控件的隐藏与显示效果,下一篇文章会讲到该问题的解决方法

猜你喜欢

转载自blog.csdn.net/qq_27155755/article/details/89642010