【问题标题】:ValueAnimator behaviour changes when AdView shows in当 AdView 显示在
【发布时间】:2019-06-06 12:56:06
【问题描述】:

我制作了一个自定义视图来可视化进度。它有一个简单的介绍动画,如下所示:

PropertyValuesHolder c=PropertyValuesHolder.ofInt("c",0,100);
ValueAnimator anim=new ValueAnimator();
anim.setValues(c);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
      @Override
      public void onAnimationUpdate(ValueAnimator animation) {
          position = (int) animation.getAnimatedValue("c");
          postInvalidate();
      }
  });
anim.setDuration(1000);
anim.start();

它可以在大约 50 个关键帧的情况下顺利运行,但是在放置在父视图上的 AdView 之后,相同的动画会出现延迟(性能降低到大约 20 个关键帧)。我检查了ValueAnimator.FrameDelay,它没有改变。

是什么导致了这个问题,解决方法是什么?

【问题讨论】:

  • 很难在没有看到更多代码的情况下肯定地说,但我的建议是使用 Android Studio 分析/调试工具来比较有/没有广告的布局(可能是 WebView,也可能是如果不是硬件加速,则需要大量 CPU 来渲染 - 只是一个想法 -)。
  • 发生在我身上的另一件事...在您用于测试的设备中,启用(在开发人员工具中)“调试 GPU -> SHow Overdraw”(或类似的)以查看是否AD导致大量透支;使用设备提供的各种工具,看看您是否可以查明导致缓慢的原因。剖析器是您的朋友! (也可以使用工具 -> 布局检查器)在运行时查看布局的快照。
  • (顺便说一句,小部件看起来很酷):)
  • @MartinMarconcini 感谢您的完整解释,我已经检查过了,但没有严重超载
  • @MartinMarconcini 感谢您的帮助,它有效

标签: android view admob android-animation android-custom-view


【解决方案1】:

正如@MartinMarconcini 所说,问题与嵌入在 AdView 中的 WebView 有关。通过在 AdView 上启用硬件加速来提高性能。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) 
        adView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
   else adView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    • 2016-04-01
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多