有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何优化动画?

我有一个collapsingToolbarLayout,我想制作一些动画,同时用户展开/折叠视图。我在addOnOffsetChangedListener中添加了一些动画,但问题是动画不平滑。例如,在崩溃时imageview必须向外扩展,然后是alpha。而且它不需要改变它的位置,所以我使用了translationY。好的,让我展示我的代码。我在用dataBinding

binding.appbar.addOnOffsetChangedListener((abLayout, offset) -> {
        // Scale out the image and alpha.
        float scale = 1 - ((float) Math.abs(offset)/abLayout.getTotalScrollRange());
        binding.image.setTranslationY(Math.abs(offset));
        binding.image.animate().scaleX(scale).scaleY(scale).alpha(scale);

        if (Math.abs(offset) == abLayout.getTotalScrollRange()) {
            binding.labelNewsTitleToolbar.setVisibility(View.VISIBLE);
            binding.labelNewsTitle.setVisibility(View.INVISIBLE);
        } else if (Math.abs(offset) < abLayout.getTotalScrollRange()) {
            binding.labelNewsTitle.setVisibility(View.VISIBLE);
            binding.labelNewsTitleToolbar.setVisibility(View.INVISIBLE);
        }
        if (offset == 0)
            binding.image.animate().scaleX(1.0f).scaleY(1.0f).alpha(1.0f);
    });

我如何优化它以使其更平滑?当我更快地折叠视图时,图像无法及时设置动画


共 (1) 个答案

  1. # 1 楼答案

    为什么不直接更改alphascale值(无动画)?你的scale变量取决于偏移量,它从0变为1,所以我认为一切看起来都很顺利

    binding.appbar.addOnOffsetChangedListener((abLayout, offset) -> {
        float scale = 1 - ((float) Math.abs(offset)/abLayout.getTotalScrollRange());
        binding.image.setTranslationY(Math.abs(offset));
        binding.image.setScaleX(scale)
        binding.image.setScaleY(scale)
        binding.image.setSAlpha(scale);
        ....
    }