Android TextView:移动TextView后的onClick

时间:2013-10-30 22:31:02

标签: java android onclick textview

我正在尝试让 textView 对用户点击做出反应。

我发现我实际上必须设置android:clickable="true",所以我的函数实际上是现在调用的。

但我的问题是,我正在使用动画在我的活动中移动 textView (从下到上)。所以现在只有当你点击 textView 过去的位置时,才会调用 onClick 函数,而不是实际的位置。

你如何解决这个问题?

修改 不幸的是,我无法以编程方式移动实际的 TextView (我正在使用 RelativeLayout ),就像第一个答案所示。 但是,我可以使用另一个TextView(透明)覆盖我的TextView的位置,只有在动画结束时才可以单击。 效果很好。

2 个答案:

答案 0 :(得分:1)

当您进行动画制作时,TextView仅被视觉移动(图形渲染表示仅在屏幕上移动),但真正的TextView对象保持在旧位置。您必须手动(以编程方式)将TextView移动到新位置。

看看Romain Guy和Chet Haase的this presentation

Chet Haase在42:00分钟正在解决这个问题。如果你有时间,看看整个演示文稿。他们正在讨论一些非常有用的事情。

答案 1 :(得分:0)

我最近不得不这样做。您没有提供任何代码,因此必须这样做。关键是设置bottomMargins来补偿。

Animation yourAnimation = AnimationUtils.loadAnimation(getActivity().getApplicationContext(), R.anim.your_anim_file);
slideOutBottom.setAnimationListener(new AnimationListener() {

    @Override
    public void onAnimationStart(Animation animation) {

    }

    @Override
    public void onAnimationRepeat(Animation animation) {
    }

    @Override
    public void onAnimationEnd(Animation animation) {
        animatedButton.clearAnimation();
        Resources r = view.getResources();
        int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, -68, r.getDisplayMetrics());
        lp = (LinearLayout.LayoutParams) animatedButton.getLayoutParams();
        lp.bottomMargin = -50;
        cartFunctionButtons.setLayoutParams(lp);
    }
});
yourAnimation.setFillAfter(true);
animatedButton.startAnimation(yourAnimation);