安卓 呼吸灯效果--代码实现

android 三步代码创建呼吸灯效果

呼吸灯效果

如图:这里介绍的是怎么完全用代码创建一个这样的效果;

–bug及解决方式:类似于在不同选项卡的界面之间来回切换时,缩放动画的相对位置发生错乱(本来).解决办法是切换出去时把包裹两个同心圆的FrameLayout从当前页面给remove调,切换进来时在重新初始化并添加一次;

        //  1.创建两个ImageView,设置圆形背景
        mIv_inner = new ImageView(mContext);
        mIv_outer = new ImageView(mContext);

        GradientDrawable drawable_outer = new GradientDrawable(); //共用一个Drawable背景会有bug,这里new俩
        drawable_outer.setShape(GradientDrawable.OVAL);
        drawable_outer.setColor(...);           
        GradientDrawable drawable_inner = new GradientDrawable();
        drawable_inner.setShape(GradientDrawable.OVAL);
        drawable_inner.setColor(getResources().getColor(...);

        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
            mIv_inner.setBackgroundDrawable(drawable_inner); 
            mIv_outer.setBackgroundDrawable(drawable_outer);
        } else {
            mIv_inner.setBackground(drawable_inner);
            mIv_outer.setBackground(drawable_outer);
        }


        //  2.ImageView添加到FrameLayout
        mParams_inner = new LayoutParams(16, 16);
        mParams_outer = new LayoutParams(28,28);
        mParams_inner.gravity = Gravity.CENTER;
        mParams_outer.gravity = Gravity.CENTER;

        mFramelayout = new FrameLayout(mContext);
        mFramelayout.addView(mIv_inner, mParams_inner);
        mFramelayout.addView(mIv_outer, mParams_outer);


        //  3.设置动画
        ScaleAnimation anim_scale = new ScaleAnimation(16 / 28 , 1f, 16 / 28, 1f,
//外圆从和内圆等大的位置开始缩放,这样好处是他俩的包裹父布局的大小能确定为外圆的大小
        ScaleAnimation.RELATIVE_TO_SELF,0.5f,ScaleAnimation.RELATIVE_TO_SELF,0.5f); 
        AlphaAnimation anim_alpha = new AlphaAnimation(1.0f, 0.3f);
        anim_scale.setRepeatCount(AnimationSet.INFINITE);
        anim_alpha.setRepeatCount(AnimationSet.INFINITE);

        mAnimationSet = new AnimationSet(true);
        mAnimationSet.addAnimation(anim_scale);
        mAnimationSet.addAnimation(anim_alpha);
        mAnimationSet.setInterpolator(new DecelerateInterpolator());
        mAnimationSet.setFillAfter(false);
        mAnimationSet.setDuration(1555);
        mLayout.addView(mFramelayout,new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT));  //加到当前布局

        mIv_outer.startAnimation(mAnimationSet);
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值