zoukankan      html  css  js  c++  java
  • Android 浮动按钮的伸缩效果

    在做项目时想增加点动感,于是就有如下效果:

    实现起来也很简单,通过属性动画和recyclerview 滑动结合就很好实现了。

    通过给recycleview添加一个滑动监听:通过滚动的差值来处理动画

    mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
                @Override
                public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                }
                @Override
                public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                    if (dy > 0 ){
                        hidenFabAnim();
                    }else{
                        showFabAnim();
                    }
                }
            });

    两个动画如下:

    /**
         * 动画隐藏浮动按钮
         */
        private void hidenFabAnim() {
            if (!isFabAnimg && mActionButton != null && mActionButton.getVisibility() == View.VISIBLE) {
                    Animator animator = ObjectAnimator.ofFloat(mActionButton, "translationY", 0f, 100f);
                    animator.setDuration(500);
                    animator.addListener(new Animator.AnimatorListener() {
                        @Override
                        public void onAnimationStart(Animator animation) {
                            isFabAnimg = true;
                        }
                        @Override
                        public void onAnimationEnd(Animator animation) {
                            isFabAnimg = false;
                            mActionButton.setVisibility(View.GONE);
                        }
    
                        @Override
                        public void onAnimationCancel(Animator animation) {
                            isFabAnimg = false;
                        }
    
                        @Override
                        public void onAnimationRepeat(Animator animation) {
    
                        }
                    });
                    animator.start();
                }
        }
    
        /**
         * 动画显示浮动按钮
         */
        private void showFabAnim(){
            if (mActionButton != null && !isFabAnimg && mActionButton.getVisibility() == View.GONE) {
                Animator animator =  ObjectAnimator.ofFloat(mActionButton,"translationY",100f,0f);
                animator.setDuration(500);
                animator.addListener(new Animator.AnimatorListener() {
                    @Override
                    public void onAnimationStart(Animator animation) {
                        isFabAnimg = true;
                    }
    
                    @Override
                    public void onAnimationEnd(Animator animation) {
                        isFabAnimg = false;
                    }
    
                    @Override
                    public void onAnimationCancel(Animator animation) {
                        isFabAnimg = false;
                    }
    
                    @Override
                    public void onAnimationRepeat(Animator animation) {
    
                    }
                });
                mActionButton.setVisibility(View.VISIBLE);
                animator.start();
            }
        }

    动画中给定了移出屏幕和显示在屏幕的距离是100,这个值并不是那么确定性,项目中需要通过屏幕密度来算这个值的大小,以便适应更好的滑动效果;定义了个

    isFabAnimg 变量,用来明确动画的状态,避免了重复执行显示或者隐藏的动画。

    可见android中要实现某些小效果还是非常的方便的
  • 相关阅读:
    采坑总结01
    Django设置联合唯一约束 -- migrate时报错处理
    Web前端开发资源整理
    kindEditor 使用
    Django模版语言自定义标签-实现前端 关联组合过滤查询
    django views视图函数返回值 return redirect httpresponse总结
    前端图片实现以瀑布流样式显示
    性能优化中CPU、内存、磁盘IO、网络性能的依赖(转)
    几种浏览器内核(百度百科)
    特殊格式文件(视频、声音等) 在数据库中的存储方式
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/9172777.html
Copyright © 2011-2022 走看看