Android 3.0下方的View.getX / Y和View.setX / Y.

时间:2013-09-04 09:04:17

标签: android android-layout android-animation

我正在开发一个必须在Android 2.2上运行的项目,我刚刚意识到我在View中使用了3.0+方法。

当按下按钮时,我有一个菜单可以垂直滑动进出动画。动画结束后,我使用setY()方法更新View位置。

我试图将它更改为getTop / setTop但是它没有正常工作,我怀疑因为getY实际上考虑了转换而getTop不是(我猜动画是作为转换处理的)。

Froyo的任何简单替代方案,而无需修改太多代码?

这是动画部分:

    animationSlideInDown = AnimationUtils.loadAnimation(this, R.anim.slide_out_down);
    animationSlideOutUp = AnimationUtils.loadAnimation(this, R.anim.slide_in_up);
    animationSlideInDown.setDuration(200);
    animationSlideOutUp.setDuration(200);
    animationSlideInDown.setAnimationListener(new AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {
            if (menuInitialPosition == -1) {
                menuInitialPosition = menu.getY();
                menuHeight = menu.getHeight();
            } else {
                menu.setY(menuInitialPosition);
            }
        }
        @Override
        public void onAnimationRepeat(Animation animation) {}

        @Override
        public void onAnimationEnd(Animation animation) {
            menu.setY(menuInitialPosition);
        }
    });
    animationSlideOutUp.setAnimationListener(new AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {}

        @Override
        public void onAnimationRepeat(Animation animation) {}

        @Override
        public void onAnimationEnd(Animation animation) {
            menu.setY(-menuHeight);
        }
    });

这是slide_out转换:

<translate
xmlns:android="http://schemas.android.com/apk/res/android"

android:fromYDelta="-100%"
android:toYDelta="0"
android:fillAfter="true"
android:fillEnabled="true"

android:duration="@android:integer/config_longAnimTime" />

谢谢!

1 个答案:

答案 0 :(得分:2)

如果您希望在屏幕上获得特定视图的位置,而不是使用:

int [] locationOnScreen = new int [2]; menu.getLocationOnScreen(locationOnScreen);

要将视图设置为特定位置,您可以使用LayoutParams并为视图设置左上边距。