一直没时间把工作中遇到的的问题整理写成文章总结,不仅仅是自己后续可以用到,也可以给其他开发小伙伴提供帮助,后续会帮遇到的问题或者学习的心得整理放上去。
业务问题:需要用到手势的监听来实现动画的各种效果。比如左滑右滑来让某个动画进行放大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);
基本上了解了上述的用法,对于手势监听实现动画的效果基本没啥问题了。另外动画的使用可能会影响到控件的隐藏与显示效果,下一篇文章会讲到该问题的解决方法