繁体   English   中英

方法适用于文字值,但不适用于具有相同值的变量

[英]Method works with literal value but not with variable holding the same value

下面的代码。

ObjectAnimator对象“ slideUpTranslate ”可以正常工作。 它将ImageView向上滑动。

slideDownTranslate,然而,这并不在所有除非文字值代替整数变量“menuHeight”的供给工作。 它不会引发任何类型的错误,当您按下向下滑动按钮时它什么也不做。

我尝试在onCreate调用中手动将menuHeight初始化为任意值。 我尝试将其指定为浮点数而不是整数。 我尝试为每个ObjectAnimator对象使用不同的变量。 我尝试使用与slideUpTranslate完全相同的参数实例化slideDownTranslate。 没有雪茄。 我真的没有看到slideDownTranslate无法正常工作的原因。

    Button slideUpButton;
    Button slideDownButton;
    ImageView menuView;
    int menuHeight;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        slideUpButton = (Button)findViewById(R.id.slideUpButton);
        slideDownButton = (Button)findViewById(R.id.slideDownButton);
        menuView = (ImageView)findViewById(R.id.menuView);

        menuView.setBackgroundResource(R.drawable.menucropped);

        //This works
        final ObjectAnimator slideUpTranslate = 
ObjectAnimator.ofFloat(menuView,View.TRANSLATION_Y, menuHeight * -1);
        slideUpTranslate.setInterpolator(new AccelerateDecelerateInterpolator());

        //This does nothing
        final ObjectAnimator slideDownTranslate = 
ObjectAnimator.ofFloat(menuView,View.TRANSLATION_Y, menuHeight);
        slideDownTranslate.setInterpolator(new AccelerateDecelerateInterpolator());


        menuView.post(new Runnable() {
            @Override
            public void run() {
               menuHeight = menuView.getHeight();
                menuView.setTranslationY(menuHeight);
            }
        });

        slideUpButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                slideUpTranslate.start();
                Log.i("Test", "Slide up clicked...  Height:" + Integer.toString(menuHeight));
            }
        });

        slideDownButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                slideDownTranslate.start();
                Log.i("Test", "Slide down clicked...  Height:" + Integer.toString(menuHeight));
            }
        });

    }
}

简而言之,这可行:

final ObjectAnimator slideDownTranslate = 
ObjectAnimator.ofFloat(menuView,View.TRANSLATION_Y, 500);

但这不是:

final ObjectAnimator slideDownTranslate = 
ObjectAnimator.ofFloat(menuView,View.TRANSLATION_Y, menuHeight);

为了进一步使事情复杂化, slideUpTranslate使用文字值变量。 它们是完全一样的,但是一个在第三个参数槽中使用变量,而另一个则不行。

如果我不能很快解决这个问题,那就去坚果屋收尾吧! 救我!

您要在menuView的值首次用于创建动画为其赋值。 除非我看不到menuItem的某些隐藏分配,否则您要将(menuHeight == 0)的值传递给两个动画师。 然后,当您稍后在onclick处理程序中记录menuHeight的值时,您会从稍后执行的Runnable中看到menuHeight的重新分配值。

您可能要考虑在启动动画的最后时刻分配动画,而不是在onCreate()中对其进行初始化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM