为什么我的animation留下踪迹?

我使用翻译animation从屏幕的左侧到右侧animation一个ImageView。 ImageView放置在使用FrameLayout的主布局顶部的RelativeLayout中。

当我在模拟器上运行animation时,一切都很顺利,但是当我使用它在G1上运行时,它会在其后面留下可视的工件并影响其后面的文本组件的渲染。

这是一个性能问题,我太雄心勃勃,或者是我可以克服的错误?

如果是性能问题,我有什么可以改进的地方?

Solutions Collecting From Web of "为什么我的animation留下踪迹?"

我现在可能有点老了,但我刚刚发现这个:

http://groups.google.com/group/android-developers/browse_thread/thread/5481450f8b71a26c/e750730b9953d9a8?lnk=gst&q=animation+leaves+trails#e750730b9953d9a8

不知道你使用的是什么Android版本,但它可能是Android库中的错误!

看起来这就是我的问题! 🙂

…当它不是你的错时,Dontcha只是喜欢它! :d

我也在2.3上遇到同样的问题。

使Animation.applyTransformation中的移动视图的容器(移动视图所在的布局)无效。

看到:

Android – 使用animation的工件

这里有一个解决方法,我发现解决了这个问题:“一个简单的解决方法是用一个小的(1像素应该做的)在右侧/底部的透明区域填充图像 – 这将不会影响它的外观,但是这会迫使一个比实际图像稍大的区域失效,从而弥补这个错误。“

http://code.google.com/p/android/issues/detail?id=22151

没有真正看到这个问题,听起来像你没有清除显示缓冲区,然后写下一帧。 这听起来不像是一个性能问题。

你有控制是否设备双缓冲或不?

鉴于它在仿真器上工作,这可能指向模拟器的一个问题,或者你的代码中没有出现在模拟器上的错误(我认为这在技术上是模拟器的一个问题!),而不是性能问题。

我会build议使用SurfaceView的animation。 它是双缓冲的,所以如果你正确使用它应该消除闪烁。 如果你想要一个例子,SDK中包含的LunarLander演示很好地展现了这一点。 另外,如果你有一个更具体的代码问题,请离开。

至于一般的Android性能,很可能会有相当高的帧速率,所以你不会期望太多。

这也发生在我身上。 我使用的是使用1.6版Google API的模拟器,我刚刚确认它发生在运行FRF83的Nexus One上。 以下是相关的代码:

Animation a = new TranslateAnimation(0.0f, 0.0f, 100.0f, 0.0f); a.setDuration(2000); this.myView.startAnimation(a); 

以下是实例化视图的相关代码:

 View v = new View(this.getApplication()); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, 80); v.setLayoutParams(params); v.setBackgroundColor(0xFFFF0000); // LinearLayout layout = (LinearLayout)this.findViewById(R.id.theLayout); layout.addView(v); // v.setOnClickListener(new View.OnClickListener() { public void onClick(View arg0) { // TODO Auto-generated method stub doAnimation(); } }); // myView = v; 

所以基本上,双缓冲等,正在由操作系统来处理,我根本无法控制它。

我有一个类似的问题在Android 2.3,所以这个错误可能依然存在。 我用的是一个带有一些透明部分的PNG的ImageView。 当使用TranslateAnimation进行animation时,此imageview正在离开轨迹。 使用一个假的背景drawable的imageview的道路(我使用drawable作为背景)。

我想到了这个果冻豆,我正在经历一个画廊的观点,同时执行一些animation。 它看起来更像是一个绘图问题不是CPU ….

让你的活动实现界面AnimatorListener …..覆盖下面的方法,并select你想重画你的视图

  @Override public void onAnimationEnd(Animator animation) { // TODO Auto-generated method stub mView.requestLayout(); Toast.makeText(this, "animation ended", 0).show(); } @Override public void onAnimationRepeat(Animator animation) { // TODO Auto-generated method stub mView.requestLayout(); } @Override public void onAnimationStart(Animator animation) { // TODO Auto-generated method stub mView.requestLayout(); }