【问题标题】:Android performance problems with view animation (sliding in/out)视图动画的 Android 性能问题(滑入/滑出)
【发布时间】:2011-03-06 21:09:58
【问题描述】:

我在 Galaxy 选项卡上有一个全屏视图翻转器,其中包含两个相对布局,每个布局显示 5 到 10 个图像视图。

当我尝试将一个视图翻转器 viewo 滑出而另一个滑入时遇到问题,“动画”什么都不做,然后只是切换。

如果我在每个视图翻转器子项中删除除一个图像视图之外的所有图像视图,则动画效果很好。

我能否以某种方式强制它为动画使用图像的混合版本,或者是相对布局容器导致了性能问题?

脚蹼动画发生时应该没有任何事情发生,所以我无法理解问题。

谢谢

编辑:一些有问题的代码:也许这可能表明导致性能问题的区域?

我的 onClick 中有两个方法调用,用于在视图中向后切换和向前切换。视图在添加到翻转器和切换之前立即“生成”。

所以,点击后退按钮(例如)我有(除其他外)......

nextView = new RelativeLayout(this);
makeAView(selectedViewObjects, viewHolder2);
switchViewNow(-1);
currentView = nextView;
...


private void makeAView(ViewObjects vObjects, RelativeLayout nextView)
{
  for(Object obj :  vObjects.viewObjects)
  {
   if(obj instanceof Image)
  {
    addImageView(nextView, obj);
  {
  else
  {
   if(obj instanceof Anim)
  {
    addAnimView(nextView, obj);
  }
}

其中 Image 是用于显示静态图像的自定义 View 实现,而 Anim 是用于显示 AnimationDrawable(多帧图像循环)的自定义视图实现。

接下来我们有switch方法:

private void switchViewNow(int direction)
    {
        if(direction == -1)
        {
            viewFrame.setInAnimation(AnimClass.inFromLeftAnimation(null));
            viewFrame.setOutAnimation(AnimClass.outToRightAnimation(null));
            viewFrame.showNext();
        }
        else
        if(direction == 1)
        {
            viewFrame.setInAnimation(AnimClass.inFromRightAnimation(null));
            viewFrame.setOutAnimation(AnimClass.outToLeftAnimation(null));
            viewFrame.showNext();
        }
    }

【问题讨论】:

  • 我之前在 Galaxy 选项卡上使用过带有滑动动画和相当复杂布局的 ViewFlippers。我很确定我什至在这些视图中使用了 RelativeLayouts。我没有遇到动画问题。我认为您应该尝试发布有问题的代码的某些部分。
  • 谢谢,我已按要求发布了一些有问题的代码。

标签: android animation viewflipper


【解决方案1】:

我可能是错的,但在我看来,您以一种令人困惑的方式重载了 nextView。

它是在 makeAView 之外定义的,但 makeAView 需要一个名为 nextView 的参数。

您将 viewHolder2 作为 nextView 传递给此函数。

这意味着makeAView不会改变'global' nextView,它会改变viewHolder2。

但是您似乎认为“全局”nextView 已被修改,因为您使用它来分配 currentView。

我认为,如果您为这两个版本的 nextView 分配唯一名称,这将是一个很好的起点。

我想知道您是否还在寻找解决方案:这篇文章相当陈旧且被忽略了。

【讨论】:

  • 感谢您的回复,但是,这是一年多以前的事了,刚开始Android开发时,我换了一份工作,一年内发生了很多变化,我不再在那里工作了我什至无法检查我做了什么来改变它以关闭这个问题。
猜你喜欢
  • 1970-01-01
  • 2016-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多