比如一些拖动 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
icetea12138 306 天前
你在 onValueChange 里又设置 animator 停止和启动 这不是套娃了 挪出去试试
|
2
nnegier OP @icetea12138 就是要放里面才行呀
|
3
iOCZS 306 天前
应该在拖动结束的时候才动画:onStopTrackingTouch
|
5
RightHand 306 天前 via Android
缩放和拖拽不要用动画直接机算赋值
|
7
Helsing 306 天前 via iPhone
这个其实不好做,你这个有点类似可打断动画,直接在滑动时设置 View 的属性效果很差的。
你可以去了解一下之前 MIUI 等各大厂商为了做可打断动画花了多少功夫,要做好这个不好弄。 |
8
Anarchy 306 天前 via Android
跟手不要动画,根据触摸获取的数据修改属性,残影大概是你修改的属性可能触发了比较重的 layout 。
|
10
AoEiuV020JP 305 天前
这样嵌套动画肯定是不对的,
考虑用 onTouch 记录触摸位置,也只记录这个,不要在这里计算以防影响性能掉帧, animator 跑什么无所谓,每一帧都用触摸位置计算一下当前宽高数值设置进去刷新 ui , 不掉帧的话这就已经是最丝滑跟手的效果了, |