当前位置: 首页 > 知识库问答 >
问题:

Android中的脉动按钮动画

乐正涵意
2023-03-14

我正在使用一个语音识别应用程序,我想让我的播放/停止按钮在录制时“脉冲”。比如:

我曾试图使一个ScaleAnimation,做按钮增长,但当然,它使增长所有的按钮。

   public static ObjectAnimator pulseAnimation(ImageView target){

    ObjectAnimator scaleDown = ObjectAnimator.ofPropertyValuesHolder(target,
            PropertyValuesHolder.ofFloat("scaleX", 1.1f),
            PropertyValuesHolder.ofFloat("scaleY", 1.1f));
    scaleDown.setDuration(310);
    scaleDown.setRepeatCount(ObjectAnimator.INFINITE);
    scaleDown.setRepeatMode(ObjectAnimator.REVERSE);

    return scaleDown;
}

所以这个想法是实现类似的东西,但是只是在实际按钮后面有一个alpha。我想知道在我的按钮后面添加第二个“阿尔法按钮”以使它成长并达到这种效果之前,是否有可能用阿尔法动画或其他东西来做到这一点。

共有2个答案

江阳羽
2023-03-14

使用Jetpack Compose,无需定制视图或画布,就可以轻松完成任务

@Composable
fun PulseLoading(
    durationMillis:Int = 1000,
    maxPulseSize:Float = 300f,
    minPulseSize:Float = 50f,
    pulseColor:Color = Color(234,240,246),
    centreColor:Color =  Color(66,133,244)
){
    val infiniteTransition = rememberInfiniteTransition()
    val size by infiniteTransition.animateFloat(
        initialValue = minPulseSize,
        targetValue = maxPulseSize,
        animationSpec = infiniteRepeatable(
            animation = tween(durationMillis, easing = LinearEasing),
            repeatMode = RepeatMode.Restart
        )
    )
    val alpha by infiniteTransition.animateFloat(
        initialValue = 1f,
        targetValue = 0f,
        animationSpec = infiniteRepeatable(
            animation = tween(durationMillis, easing = LinearEasing),
            repeatMode = RepeatMode.Restart
        )
    )
    Box(contentAlignment = Alignment.Center,modifier = Modifier.fillMaxSize()) {
//Card for Pulse Effect
        Card(
            shape = CircleShape,
            modifier = Modifier.size(size.dp).align(Alignment.Center).alpha(alpha),
            backgroundColor = pulseColor,
            elevation = 0.dp
        ) {}
//Card For inner circle
        Card(modifier = Modifier
            .size(minPulseSize.dp)
            .align(Alignment.Center),
            shape = CircleShape,
            backgroundColor = centreColor){}
    }
}

你可以根据自己的需要定制。在内圈卡片中,你可以添加文本或任何你想要的内容。

我已经创建了一个完整的一步一步的教程,你可以在这里查看。

梁福
2023-03-14

终于我找到了解决办法!我重写了onDraw方法,并为我的按钮画了第一个圆,当我的布尔值为真时。我用alpha作为背景画第二个圆。使产生脉动的效果:

 @Override
protected void onDraw(Canvas canvas) {

    int w = getMeasuredWidth();
    int h = getMeasuredHeight();
    mCirclePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
    mCirclePaint.setColor(mColor);
    mBackgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
    mBackgroundPaint.setColor(Util.adjustAlpha(mColor, 0.4f));
    //Draw circle
    canvas.drawCircle(w/2, h/2, MIN_RADIUS_VALUE , mCirclePaint);        
    if (mAnimationOn) {
        if (mRadius >= MAX_RADIUS_VALUE)
            mPaintGoBack = true;
        else if(mRadius <= MIN_RADIUS_VALUE)
            mPaintGoBack = false;
        //Draw pulsating shadow
        canvas.drawCircle(w / 2, h / 2, mRadius, mBackgroundPaint);
        mRadius = mPaintGoBack ? (mRadius - 0.5f) : (mRadius + 0.5f);
        invalidate();
    }

    super.onDraw(canvas);
}
 public void animateButton(boolean animate){
    if (!animate)
        mRadius = MIN_RADIUS_VALUE;
    mAnimationOn = animate;
    invalidate();
}
 类似资料:
  • 我正在为Android在Eclipse中编写一个应用程序。该应用程序不断与Web服务器中的内容进行通信。在服务器中,我有一个带有另一个按钮的html文件。我希望当我按下Android应用程序中的按钮时,html文件中的按钮被自动单击...是否可能。请建议... 我看到下面的代码(jquery): 谢啦

  • 这是我的问题: 我想在一个活动中实现两个按钮。一个是计算BMI,另一个是检查时间。我希望用户能在同一个活动中看到两个按钮,这也取决于他们想做什么。(这些功能不是同时工作的,而是分开的。另外,我在这两个活动中都实现了返回主页的按钮。) 在Android模拟器中,消息来自“应用程序继续停止”。 以下是主要活动。java文件: 谢谢! 这些消息是我按下导致应用程序停止的按钮后的stacktrace:

  • 问题内容: 当前在我的应用程序中按下按钮后,我有一个按钮的基本动画。按钮完成动画设置后,我无法再单击它。它甚至不带有橙色突出显示。 有什么帮助吗? 这是我的代码: 问题答案: 动画仅影响小部件的绘制,这意味着完成动画后,您的按钮仍位于其先前位置。如果要将按钮移动到新位置,则需要手动更新按钮的布局参数。同样,您的AnimationSet和AnimationController也没有用。

  • 我一直试图改变材质的浮动动作按钮颜色,但没有成功。 我曾试图补充: 或通过代码: 或 但上述方法都不奏效。我也试过提出的重复问题中的解决方案,但都行不通;按钮保持绿色,也变成了正方形。 附注。如果知道如何添加涟漪效果也会很好,也不能理解。

  • 有很多自定义库来实现FAB菜单。但我希望它不使用任何自定义库。我想实现这个晶圆厂本机菜单。 请不要建议我任何自定义图书馆

  • 我想为我的工厂制作动画,就像材料设计原理中的这个例子,我意识到工厂里的图标有两个动画。一个是旋转共享图标,另一个是alpha动画同步。之后,另一个图标被替换。但当我为这个目标创建动画集时,整个晶圆厂旋转并消失,但我希望晶圆厂内的图标拍摄这个动画。我怎样才能创建这个动画?谢谢