Android按钮在animation后没有响应

在我的应用程序中当前按下按钮后,我有一个按钮的基本animation。 按钮完成animation后,我再也无法点击它了。 它甚至没有按橙色突出显示。

有帮助吗?

这是我的代码:

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); animation = new AnimationSet(true); animation.setFillAfter(true); Animation translate = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 5.0f); translate.setDuration(500); animation.addAnimation(translate); LayoutAnimationController controller = new LayoutAnimationController(animation, 0.25f); generate = (Button)findViewById(R.id.Button01); generate.setOnClickListener(new View.OnClickListener(){ public void onClick(View v){ keyFromTop(); } }); } public void keyFromTop(){ generate.setAnimation(animation); } 

animation仅影响窗口小部件的绘制,这意味着在animation完成后,您的按钮仍处于其先前位置。 如果要将按钮移动到新位置,则需要手动更新按钮的布局参数。 此外,您的AnimationSet和您的AnimationController是无用的。

如果您希望能够在animation完成后单击该按钮,则必须手动移动该组件。 以下是应用于按钮的翻译animation示例:

 public class Test2XAnimation extends Activity { private RelativeLayout buttonContainer; private Button button; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) this.findViewById(R.id.button1); buttonContainer = (RelativeLayout) button.getParent(); } public void startTapped(View view) { animateButton(200, 100); } public void buttonTapped(View view) { Toast.makeText(this, "tap", Toast.LENGTH_SHORT).show(); } private RelativeLayout.LayoutParams params; private CharSequence title; private void animateButton(final int translateX, final int translateY) { TranslateAnimation translate = new TranslateAnimation(0, translateX, 0, translateY); translate.setDuration(1500); translate.setAnimationListener(new AnimationListener() { public void onAnimationEnd(Animation animation) { buttonContainer.removeView(button); button = new Button(Test2XAnimation.this); button.setText(title); button.setOnClickListener(new OnClickListener() { public void onClick(View v) { buttonTapped(button); } }); params.leftMargin = translateX + params.leftMargin; params.topMargin = translateY + params.topMargin; params.rightMargin = 0 + params.rightMargin; params.bottomMargin = 0 + params.bottomMargin; button.setLayoutParams(params); buttonContainer.addView(button); } public void onAnimationRepeat(Animation animation) { } public void onAnimationStart(Animation animation) { params = (RelativeLayout.LayoutParams) button.getLayoutParams(); title = button.getText(); } }); button.startAnimation(translate); } } 

当用户单击UI中的按钮时,会触发startTapped()方法。 另一个按钮移动(200,100)。 最后,我删除旧的并创建一个新的,然后将其添加到父视图。 您可以看到在animation后调用buttonTapped()。

建议:如果要同时支持animation组件的新旧方法,可以使用NineOldAndroids项目,然后可以检查操作系统版本并仅在Gingerbread及更低版本上运行此代码。

我真的很努力地改变布局参数,使“真正的”按钮与其animation位置相匹配。 我终于成功地使用了这种方法 。 我扩展了ImageButton并覆盖了getHitRect:

  @Override public void getHitRect(Rect outRect) { Rect curr = new Rect(); super.getHitRect(curr); outRect.bottom = curr.bottom + 75; outRect.top = curr.top + 75; outRect.left = curr.left; outRect.right = curr.right; } 

然后,我可以在麻烦的视图中使用此按钮:

 CLOSE_SYSTEM_DIALOGS广播后,三星设备不会关闭应用程序抽屉
  • 在Android屏幕上动态显示字符串文本
  • Dagger 2与Kotlin的多重绑定
  • 使用gestureoverlayview与scrollview问题
  • 无法构造通知:非法构造函数
  • Android Studio问题
  • 更新到最新版本(3.1)后,google-play-services_lib.jar缺失
  • 为什么Eclipse不会看到我的三星Galaxy手机,即使我可以使用驱动器号传输文件?
  • 在Android Studio中构建项目时出错“错误:找不到与给定名称匹配的资源(在____,值为'@ drawable / ')
  • android:fontFamily要求api等级16,但文档说15级是可以的吗?
  • Android市场url
  • 主页按下并终止应用时,onTaskRemoved()不会被调用
  • 如何确定图像视图上的长按监听器?