【问题标题】:NineOldAndroids, not clickable view after rotation or moveNineOldAndroids,旋转或移动后不可点击的视图
【发布时间】:2012-12-19 22:04:33
【问题描述】:

我使用NineOldAndroids 2.4.0 为对象设置动画 主要用于控制的运动和变换。 在 Android 4.0 及更高版本上一切正常,但在以前的版本(2.1、2.3)上,动画元素没有获得焦点并且不能点击。 示例代码:

View v = findViewById(R.id.button1);
v.setOnClickListener(new OnClickListener() {

     @Override
     public void onClick(View v) {
        Toast.makeText(MainActivity.this, "Click!", Toast.LENGTH_SHORT).show();
     }
});
ObjectAnimator moveDown = ObjectAnimator.ofFloat(v, "translationY", 100f);
moveDown.setDuration(5000);
moveDown.start();

这是库中的错误还是我做错了什么?如果这 库不支持“Honeycomb动画API”的所有功能,那么在我的项目中,它将无用。

"Animation in Honeycomb"的Android开发者博客上引用: 由于系统实际上是在更改目标对象的属性,因此对象本身会发生更改,而不仅仅是它们的外观。因此,您移动的按钮实际上是移动的,而不仅仅是在不同的位置绘制。您甚至可以在其动画位置单击它。继续点击它;我敢。

【问题讨论】:

  • 您拥有的 sn-p 对我来说在 2.3 上的 NineOldAndroid 上运行良好。确保您已导入 com.nineoldandroids.animation.ObjectAnimator 而不是 android.animation.ObjectAnimator。
  • 是的,我导入了 com.nineoldandroids.animation.ObjectAnimator。你确定你可以在移动后按下按钮吗?正如我之前所说,这不适用于
  • 我遇到了同样的问题。您是否尝试使用 translateYBy() 或 x()?

标签: android animation


【解决方案1】:

现在我找到了答案: How to do interactive animation (translation) with Android

它说 Nineoldandroids 有与原生 SDK 相同的限制。

所以我的解决方案:

myAnim.setListener(new AnimatorListenerAdapter() {
  @Override
  public void onAnimationEnd ( Animator nullPointer ) {
    RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) child.getLayoutParams();
    params.bottomMargin += toYDelta;
    params.leftMargin += toXDelta;
    child.setLayoutParams(params);
  }
});

【讨论】:

  • 是的,这是平台限制。当动画在 pre-Honeycomb 结束时,您需要物理移动视图。
  • 请注意,如果视图在其父级移动,则更改视图的边距以重新定位视图效果很好,但如果您需要重新定位视图以便它的一部分是移动到其父边界框之外,您可能会遇到调整视图大小的问题。
猜你喜欢
  • 2012-11-28
  • 1970-01-01
  • 1970-01-01
  • 2018-06-15
  • 2013-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多