仿赶集生活客户端启动动画效果

demo下载地址:

因为前几年csdn泄露密码的事件,导致我的账号被拿去发广告文章了,联系了管理员帮我把几篇广告文删掉,但是那几篇高质量的文章就这样没了。现在补回其中一篇,是关于如何实现像赶集生活客户端第一次启动时的介绍动画的,demo在上面,可以下载来试试效果。有需要的可以在评论里提供邮箱,博主会把工程发过去 : )

//FeatureAnimationListener.javapackage com.example.animatetest;import android.view.View;import android.view.animation.Animation;import android.view.animation.Animation.AnimationListener;public class FeatureAnimationListener implements AnimationListener {private View mAnimView;private boolean mAnimIn;public FeatureAnimationListener(View animView, boolean animIn) {mAnimView = animView;mAnimIn = animIn;}@Overridepublic void onAnimationEnd(Animation animation) {if(!mAnimIn) {mAnimView.setVisibility(View.INVISIBLE);}}@Overridepublic void onAnimationRepeat(Animation animation) {}@Overridepublic void onAnimationStart(Animation animation) {if(mAnimIn) {mAnimView.setVisibility(View.VISIBLE);}}}//OnScrollChangedListener.javapackage com.example.animatetest;public abstract interface OnScrollChangedListener {public abstract void onScrollChanged(int top, int oldTop);}//ObservableScrollView.javapackage com.example.animatetest;import android.content.Context;import android.util.AttributeSet;import android.widget.ScrollView;public class ObservableScrollView extends ScrollView {private OnScrollChangedListener onScrollChangedListener;public ObservableScrollView(Context context, AttributeSet attrs,int defStyle) {super(context, attrs, defStyle);}public ObservableScrollView(Context context, AttributeSet attrs) {super(context, attrs);}public ObservableScrollView(Context context) {super(context);}@Overrideprotected void onScrollChanged(int l, int t, int oldl, int oldt) {super.onScrollChanged(l, t, oldl, oldt);if(this.onScrollChangedListener != null) {onScrollChangedListener.onScrollChanged(t, oldt);}}public void setOnScrollChangedListener(OnScrollChangedListener onScrollChangedListener) {this.onScrollChangedListener = onScrollChangedListener;}}//MainActivity.javapackage com.example.animatetest;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.view.View;import android.view.ViewTreeObserver.OnGlobalLayoutListener;import android.view.animation.Animation;import android.view.animation.AnimationUtils;public class MainActivity extends Activity implements OnGlobalLayoutListener, OnScrollChangedListener {private ObservableScrollView mScrollView;private View mAnimView;private int mScrollViewHeight;private int mStartAnimateTop;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mScrollView = (ObservableScrollView)this.findViewById(R.id.scrollView1);mScrollView.getViewTreeObserver().addOnGlobalLayoutListener(this);mScrollView.setOnScrollChangedListener(this);mAnimView = this.findViewById(R.id.anim1);mAnimView.setVisibility(View.INVISIBLE);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic void onGlobalLayout() {mScrollViewHeight = mScrollView.getHeight();mStartAnimateTop = mScrollViewHeight / 3 * 2;}boolean hasStart = false;@Overridepublic void onScrollChanged(int top, int oldTop) {int animTop = mAnimView.getTop() – top;if(top > oldTop) {if(animTop < mStartAnimateTop && !hasStart) {Animation anim1 = AnimationUtils.loadAnimation(this, R.anim.feature_anim2scale_in);anim1.setAnimationListener(new FeatureAnimationListener(mAnimView, true));mAnimView.startAnimation(anim1);hasStart = true;}} else {if(animTop > mStartAnimateTop && hasStart) {Animation anim1 = AnimationUtils.loadAnimation(this, R.anim.feature_alpha_out);anim1.setAnimationListener(new FeatureAnimationListener(mAnimView, false));mAnimView.startAnimation(anim1);hasStart = false;}}}}

这里主要是继承ScrollView,,重载里面的onScrollChanged方法,监听ScrollView的滑动状态,从而控制动画的显示和消失。

空虚无聊的时候就读书,但一定得有自己的生活目标和计划。

仿赶集生活客户端启动动画效果

相关文章:

你感兴趣的文章:

标签云: