V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nnegier
V2EX  ›  Android

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

  •  
  •   nnegier · 344 天前 · 7828 次点击
    这是一个创建于 344 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如一些拖动 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();
                }
            });
    
        }
    }
    
    第 1 条附言  ·  344 天前
    是真不明白我的意图?连着三个偏题的回复了,哎
    10 条回复    2024-01-14 15:13:58 +08:00
    icetea12138
        1
    icetea12138  
       344 天前
    你在 onValueChange 里又设置 animator 停止和启动 这不是套娃了 挪出去试试
    nnegier
        2
    nnegier  
    OP
       344 天前 via Android
    @icetea12138 就是要放里面才行呀
    iOCZS
        3
    iOCZS  
       344 天前
    应该在拖动结束的时候才动画:onStopTrackingTouch
    nnegier
        4
    nnegier  
    OP
       344 天前 via Android
    @iOCZS 我想实现的效果就是拖拽过程中就会跟随手指放大缩小,不是结束才动画
    RightHand
        5
    RightHand  
       344 天前 via Android
    缩放和拖拽不要用动画直接机算赋值
    nnegier
        6
    nnegier  
    OP
       344 天前
    @RightHand 你不用动画,就会突突突的,不流畅
    Helsing
        7
    Helsing  
       344 天前 via iPhone
    这个其实不好做,你这个有点类似可打断动画,直接在滑动时设置 View 的属性效果很差的。

    你可以去了解一下之前 MIUI 等各大厂商为了做可打断动画花了多少功夫,要做好这个不好弄。
    Anarchy
        8
    Anarchy  
       344 天前 via Android
    跟手不要动画,根据触摸获取的数据修改属性,残影大概是你修改的属性可能触发了比较重的 layout 。
    RightHand
        9
    RightHand  
       343 天前 via Android
    @nnegier 触摸移动的回报率很高的,除非有其他问题,正常不会不流畅
    AoEiuV020JP
        10
    AoEiuV020JP  
       343 天前
    这样嵌套动画肯定是不对的,
    考虑用 onTouch 记录触摸位置,也只记录这个,不要在这里计算以防影响性能掉帧,
    animator 跑什么无所谓,每一帧都用触摸位置计算一下当前宽高数值设置进去刷新 ui ,
    不掉帧的话这就已经是最丝滑跟手的效果了,
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2931 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 13:30 · PVG 21:30 · LAX 05:30 · JFK 08:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.