小编asa*_*007的帖子

活动开始时的动画跳跃

我正在为我的Android应用设置动画自定义视图.我已经通过Property Animations完成了这项工作,并根据https://developer.android.com/guide/topics/graphics/prop-animation.html调用invalidate()onAnimationUpdate()回调中的View :

根据您动画的属性或对象,您可能需要在视图上调用invalidate()方法以强制屏幕使用更新的动画值重绘自身.您可以在onAnimationUpdate()回调中执行此操作.

我的问题是,当这些动画在新启动的 Activity 的开头运行时,它们会在开头跳过帧,导致它们非常明显地跳跃.我试过了两个:

  1. 立即从Activity的onCreate()方法开始动画
  2. OnGlobalLayout()使用Activity的根视图的ViewTreeObserver在回调时启动动画.

我做了后者因为我认为可能在布局完成之前调用了动画,但结果是一样的.

使用日志,我确定在onAnimationUpdate()整个动画中一致地调用回调(即,从开始到结束每隔10-20毫秒左右).onAnimationUpdate()简单地调用invalidate(),这应该强制View重绘自己,理想情况下立即(但文档只声称这种情况发生在"未来的某个时刻").这似乎正是问题所在:onDraw()在一开始只调用一次或两次,而不是被调用大约250 ms.在此之后,它每10-20毫秒恢复一次,因为它应该有整个时间.但是这段时间会导致动画中出现非常明显的延迟.

要清楚,此问题仅发生在活动的开头.如果我在开始动画之前只设置了300毫秒的延迟,它就会一直平稳运行.但我不喜欢这个解决方案,因为它很笨拙.似乎问题是在活动开始附近onDraw()没有立即调用invalidate().但是,我无法弄清楚为什么会这样,阻塞什么onDraw(),或者如何解决它.

我发现只有这个StackOverFlow线程:活动开始时的动画会跳过海报有相同问题的.基本代码就在那里,视频可以清楚地解决问题.我也可以发布我的代码,但我认为问题出现在最基本的测试应用程序中的事实表明还有其他事情正在发生.

animation android android-animation android-layout android-lifecycle

10
推荐指数
1
解决办法
777
查看次数

为什么writeBytes丢弃每个字符的高八位?

我想使用DataOutputStream#writeBytes,但遇到了错误.writeBytes(String)来自Java文档的描述:

将字符串作为字节序列写入基础输出流.通过丢弃其高8位,按顺序写出字符串中的每个字符.

我认为我遇到的问题是由于关于"丢弃其高八位"的部分.这是什么意思,为什么它会这样运作?

java

4
推荐指数
2
解决办法
285
查看次数

在c ++中初始化指针

我开始学习C++和指针.但是我在初始化时有点困惑.根据我的理解,如果我有一些类X,以下代码是有效的:

X* pointer = new X();
Run Code Online (Sandbox Code Playgroud)

这让我感到困惑,因为我希望你想通过给它一个对象的地址来初始化一个指针,而不是对象本身,如:

X* pointer = &(new X());
Run Code Online (Sandbox Code Playgroud)

C++会自动将前者转换为后者吗?谢谢.

c++ pointers reference

2
推荐指数
1
解决办法
170
查看次数