答案 0 :(得分:3)
有很多方法可以做到这一点。最好的方法可能是在第三方工具中渲染动画,然后在设备上播放它,但也有一些更简单的方法 - 例如只使用ValueAnimator
和一些drawables或者AnimationDrawable
- 创建类似的东西。
我将在此答案中演示ValueAnimator
版本。结果应如下所示:
此动画分为两部分:
对于画笔,我使用画笔的透明png图像。刷子留下的油漆只是FrameLayout
,背景为黑色。
使用FrameLayout
作为容器,我将它们放在我的布局中,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="100dp">
<FrameLayout
android:id="@+id/paint"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_gravity="center_vertical"
android:background="@android:color/black"/>
<ImageView
android:id="@+id/brush"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:src="@drawable/paint_brush"/>
</FrameLayout>
</FrameLayout>
执行动画的代码非常简单:
final View brush = findViewById(R.id.brush);
final View paint = findViewById(R.id.paint);
final ValueAnimator animator = ValueAnimator.ofFloat(0.0f, 1.0f);
animator.setRepeatCount(ValueAnimator.INFINITE);
animator.setDuration(6000L);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
final float progress = (float) valueAnimator.getAnimatedValue();
paint.setTranslationX(-paint.getWidth() * (1.0f - progress));
brush.setTranslationX(paint.getWidth() * progress);
}
});
animator.start();
在此示例中,ValueAnimator
设置为无限重复。在AnimatorUpdateListener
我更新了translationX属性,将画笔和画笔一起移动到整个屏幕上。油漆被屏幕的宽度所抵消,因此它一直从屏幕开始,然后在画笔后面移动,以在屏幕上创建画笔的幻觉。
如果您有任何其他问题,请随时提出!