zoukankan      html  css  js  c++  java
  • TranslateAnimation平移效果

    1、构造平移动画

    (1)构造方法一

    // 下面的效果是将标题栏titleBar向上平移自身高度的距离,即隐藏
                        // 每两个为一组参数,相对于本身控件的X起始位置、x结束位置、y起始位置、y结束位置
                        TranslateAnimation translate = new TranslateAnimation(
                                Animation.RELATIVE_TO_SELF, 0,
                                Animation.RELATIVE_TO_SELF, 0,
                                Animation.RELATIVE_TO_SELF, 0,
                                Animation.RELATIVE_TO_SELF, -1.0f);
    
                        // 设置动画执行多少次,如果是-1的话就是一直重复
                        translate.setRepeatCount(Animation.INFINITE);
                        ;
                        // 设置重复模式,RESTART为结束后重新开始,REVERSE为按原来的轨迹逆向返回
                        translate.setRepeatMode(Animation.RESTART);
                        translate.setDuration(1000);// 毫秒单位,5s
                        // 设为true之后,界面会停留在动画播放完时的界面。
                        translate.setFillAfter(true);
                        titleBar.startAnimation(translate);

    (2)构造方法二:沿竖直方向向下移动50个坐标(PX)

    TranslateAnimation translate = new TranslateAnimation(0,0,0,50);

    float fromXDelta:这个参数表示动画开始的点离当前View X坐标上的差值;

    float toXDelta, 这个参数表示动画结束的点离当前View X坐标上的差值;

    float fromYDelta, 这个参数表示动画开始的点离当前View Y坐标上的差值;

    float toYDelta)这个参数表示动画开始的点离当前View Y坐标上的差值;

     2、关于加速减速执行动画

     //根据用户在Spinner的选择设置target的进入的方式  
            switch (position) {  
                case 0:  
                    //加速进入  
                    a.setInterpolator(AnimationUtils.loadInterpolator(this,  
                            android.R.anim.accelerate_interpolator));  
                    break;  
                case 1:  
                    //减速进入  
                    a.setInterpolator(AnimationUtils.loadInterpolator(this,  
                            android.R.anim.decelerate_interpolator));  
                    break;  
                case 2:  
                    //加速进入.与第一个的区别为当repeatMode为reverse时,仍为加速返回原点  
                    a.setInterpolator(AnimationUtils.loadInterpolator(this,  
                            android.R.anim.accelerate_decelerate_interpolator));  
                    break;  
                case 3:  
                    //先往后退一点再加速前进  
                    a.setInterpolator(AnimationUtils.loadInterpolator(this,  
                            android.R.anim.anticipate_interpolator));  
                    break;  
                case 4:  
                    //减速前进,冲过终点前再后退  
                    a.setInterpolator(AnimationUtils.loadInterpolator(this,  
                            android.R.anim.overshoot_interpolator));  
                    break;  
                case 5:  
                    //case 3,4的结合体  
                    a.setInterpolator(AnimationUtils.loadInterpolator(this,  
                            android.R.anim.anticipate_overshoot_interpolator));  
                    break;  
                case 6:  
                    //停止前来回振几下  
                    a.setInterpolator(AnimationUtils.loadInterpolator(this,  
                            android.R.anim.bounce_interpolator));  
                    break;  
            }  

     3、动画监听器,不是在startAnimation后面的语句就是在动画结束后才执行

            translate.setAnimationListener(new AnimationListener() {
                
                @Override
                public void onAnimationStart(Animation arg0) {
                    // TODO Auto-generated method stub
                    
                }
                
                @Override
                public void onAnimationRepeat(Animation arg0) {
                    // TODO Auto-generated method stub
                    
                }
                
                @Override
                public void onAnimationEnd(Animation arg0) {
                    // TODO Auto-generated method stub
                    marginParams=(MarginLayoutParams) getLayoutParams();
                    Log.i("动画结束", "gmarginBottom"+marginParams.bottomMargin);
                }
            });

     4、特别注意:

    (1)view在动画执行后位置变化了,其layoutparams的值并没有改变;

    包括其点击事件的监听区域也没变。

    (2)为避免动画执行后再执行布局改动的时候出现闪动,需要在动画监听器的END中clear+设置应该处于的布局

    @Override
                                    public void onAnimationEnd(Animation arg0) {
                                        // TODO Auto-generated method stub
                                        view1.clearAnimation();
                                        params1.width = 0;
                                        view1.setLayoutParams(params1);
                                    }

    Done!

  • 相关阅读:
    vim常用命令
    转:CRF++总结1
    转:CRF++总结2
    并查集算法程序
    CRF++使用小结(转)
    并查集算法程序
    C#winform 画图
    转:字符识别
    转:A Survey On Relation Extraction
    转:生产计划问题
  • 原文地址:https://www.cnblogs.com/xingyyy/p/4175674.html
Copyright © 2011-2022 走看看