gpt4 book ai didi

android - 前 L 上类似 L 释放的 Touch Ripple 动画

转载 作者:IT老高 更新时间:2023-10-28 23:21:53 26 4
gpt4 key购买 nike

我喜欢作为新 UI 理念 Material Design 的一部分在新 Android L 版本中引入的新 Touch Ripple 动画。

您可以在官方设计规范中的表面 react 下找到它的视频:http://www.google.com/design/spec/animation/responsive-interaction.html

它基本上是一个深灰色的圆圈,在 View 的中心淡入并随着它再次淡出而增大,最终用浅灰色填充整个 View ,然后再次消失。

我想将完全相同的动画添加到我的应用中针对 ICS 的 View 中。

我对如何在我的应用程序中添加这个动画有点不知所措。官方文档位于 http://developer.android.com/training/animation/index.html似乎没有涵盖“在 View 内”发生的动画。另外,如果可能的话,我不想使用预先绘制的帧动画(每帧一个 png 资源)。

我将如何实现?非常感谢任何帮助!

最佳答案

我很快就做好了,远非理想,但是,嘿,它是:Gist

基本上是根据动画半径绘制一个圆。要获得准确的 L 效果,还需要进行一些调整。有趣的代码:

@Override
public boolean onTouchEvent(@NonNull final MotionEvent event) {
if (event.getActionMasked() == MotionEvent.ACTION_UP) {
mDownX = event.getX();
mDownY = event.getY();

ObjectAnimator animator = ObjectAnimator.ofFloat(this, "radius", 0, getWidth() * 3.0f);
animator.setInterpolator(new AccelerateInterpolator());
animator.setDuration(400);
animator.start();
}
return super.onTouchEvent(event);
}

public void setRadius(final float radius) {
mRadius = radius;
if (mRadius > 0) {
RadialGradient radialGradient = new RadialGradient(
mDownX,
mDownY,
mRadius * 3,
Color.TRANSPARENT,
Color.BLACK,
Shader.TileMode.MIRROR
);
mPaint.setShader(radialGradient);
}
invalidate();
}

private Path mPath = new Path();
private Path mPath2 = new Path();

@Override
protected void onDraw(@NonNull final Canvas canvas) {
super.onDraw(canvas);

mPath2.reset();
mPath2.addCircle(mDownX, mDownY, mRadius, Path.Direction.CW);

canvas.clipPath(mPath2);

mPath.reset();
mPath.addCircle(mDownX, mDownY, mRadius / 3, Path.Direction.CW);

canvas.clipPath(mPath, Region.Op.DIFFERENCE);

canvas.drawCircle(mDownX, mDownY, mRadius, mPaint);
}

在他们的演讲“Android 的新功能”中,他们谈到这个动画实际上发生在一个单独的“渲染线程”上,它将在 L 版本中首次亮相。这将允许更流畅的动画,即使在 UI 线程忙于充气或做任何其他昂贵的事情时也是如此。

关于android - 前 L 上类似 L 释放的 Touch Ripple 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24417693/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com