Android View 动画怎样才能更流畅呢?

344 天前
 nnegier

比如一些拖动 UI 的效果,放大缩小的效果等,因为涉及到频繁的 ObjectAnimator#cancel 和 ObjectAnimator#start ,但是我不知道为什么我就是弄不出那种效果,应该这里关键的部分是 setDuration 那里吧?

public class MainActivity extends AppCompatActivity {
    private final int DURATION=1000;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Slider slider = findViewById(R.id.slider);
        CircleView circleView = findViewById(R.id.circle_view);
        ObjectAnimator animator = ObjectAnimator.ofInt(circleView, "width", 0, ((int) slider.getValueTo()));
        slider.addOnChangeListener(new Slider.OnChangeListener() {
            @Override
            public void onValueChange(@NonNull Slider slider, float value, boolean fromUser) {
                animator.cancel();
                animator.setIntValues((int) animator.getAnimatedValue(),(int)value);
                animator.setDuration((long) (DURATION*((100-(int)animator.getAnimatedValue())/slider.getValueTo())));
                animator.start();
            }
        });

    }
}
7827 次点击
所在节点    Android
10 条回复
icetea12138
344 天前
你在 onValueChange 里又设置 animator 停止和启动 这不是套娃了 挪出去试试
nnegier
344 天前
@icetea12138 就是要放里面才行呀
iOCZS
344 天前
应该在拖动结束的时候才动画:onStopTrackingTouch
nnegier
344 天前
@iOCZS 我想实现的效果就是拖拽过程中就会跟随手指放大缩小,不是结束才动画
RightHand
344 天前
缩放和拖拽不要用动画直接机算赋值
nnegier
344 天前
@RightHand 你不用动画,就会突突突的,不流畅
Helsing
344 天前
这个其实不好做,你这个有点类似可打断动画,直接在滑动时设置 View 的属性效果很差的。

你可以去了解一下之前 MIUI 等各大厂商为了做可打断动画花了多少功夫,要做好这个不好弄。
Anarchy
343 天前
跟手不要动画,根据触摸获取的数据修改属性,残影大概是你修改的属性可能触发了比较重的 layout 。
RightHand
343 天前
@nnegier 触摸移动的回报率很高的,除非有其他问题,正常不会不流畅
AoEiuV020JP
343 天前
这样嵌套动画肯定是不对的,
考虑用 onTouch 记录触摸位置,也只记录这个,不要在这里计算以防影响性能掉帧,
animator 跑什么无所谓,每一帧都用触摸位置计算一下当前宽高数值设置进去刷新 ui ,
不掉帧的话这就已经是最丝滑跟手的效果了,

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1008359

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX