【问题标题】:First touch of onTouch animation not working第一次触摸 onTouch 动画不起作用
【发布时间】:2015-07-30 21:40:54
【问题描述】:

在我的应用程序中,我实现了一个视图,其中 2 个片段面板由中间的分隔线分隔。您可以拖动这些片段中的每一个,从而过渡到完全查看它们——登录/注册。我的 onTouchListener 完全可以工作,除了你第一次触摸屏幕。视图会跳到某个奇怪的位置,然后一旦您继续拖动,它就会起作用。有谁知道为什么会这样??

    @Override
public boolean onTouch(View v, MotionEvent event) {

    _xDelta = 0;

    switch (event.getAction()) {

        case MotionEvent.ACTION_DOWN: {
            downXValue = (int) event.getRawX();
            break;
        }

        case MotionEvent.ACTION_MOVE: {
            int currentX = (int) event.getRawX();

            _xDelta = Math.abs(currentX - downXValue);

                if (downXValue < currentX) {

                    _xDelta = currentX - downXValue;

                    if(_xDelta >= 20) {

                        if(_xDelta <= (screenWidth/3)) {

                            lParams.width = initPanelWidth + ((int) (_xDelta * 1.7));
                            loginPanel.view.setLayoutParams(lParams);

                            loginForm.view.setAlpha(getAlpha(lParams.width - initPanelWidth));
                            welcomeFrameLayout.setAlpha(1 - getAlpha(lParams.width - initPanelWidth));
                            registerParent.view.setAlpha(1 - getAlpha(lParams.width - initPanelWidth));
                            dontReset = false;

                        } else{

                            lParams.width = screenWidth;
                            loginPanel.view.setLayoutParams(lParams);

                            rParams.width = 0;
                            registerPanel.view.setLayoutParams(rParams);

                            loginParent.view.setAlpha(0);
                            loginForm.view.setAlpha(1);
                            welcomeFrameLayout.setAlpha(0);
                            registerParent.view.setAlpha(0);
                            dontReset = true;

                        }


                    }

                }else {

                    _xDelta = downXValue - currentX;

                    if(_xDelta <= ((2*screenWidth)/5)) {

                        rParams.width = initPanelWidth + ((int) (_xDelta * 1.7));
                        registerPanel.view.setLayoutParams(rParams);

                        registerForm.view.setAlpha(getAlpha(rParams.width - initPanelWidth));
                        welcomeFrameLayout.setAlpha(1 - getAlpha(rParams.width - initPanelWidth));
                        loginParent.view.setAlpha(1 - getAlpha(rParams.width - initPanelWidth));
                        dontReset = false;

                    } else{

                        rParams.width = screenWidth;
                        registerPanel.view.setLayoutParams(rParams);

                        lParams.width = 0;
                        loginPanel.view.setLayoutParams(lParams);

                        registerParent.view.setAlpha(0);
                        registerForm.view.setAlpha(1);
                        welcomeFrameLayout.setAlpha(0);
                        loginParent.view.setAlpha(0);
                        dontReset = true;


                    }


                }
            }
            break;
        case MotionEvent.ACTION_UP:

            if(!dontReset) {
                lParams.width = initPanelWidth;
                loginPanel.view.setLayoutParams(lParams);
                loginForm.view.setAlpha(0);

                rParams.width = initPanelWidth;
                registerPanel.view.setLayoutParams(rParams);
                registerForm.view.setAlpha(0);


                welcomeFrameLayout.setAlpha(1);
                loginParent.view.setAlpha(1);
                registerParent.view.setAlpha(1);
            }



        }


    return true;
}

【问题讨论】:

  • 您是否查看过返回的 MotionEvent 是什么?也许放入 default 案例并输出 event
  • 它正在返回动作 @DigitalNinja
  • 我才发现你是故意放假的?这就是您在 ACTION_MOVE 事件之前获得downXValue 的方式?
  • 是的。我也刚刚休息,但它没有做任何事情@DigitalNinja
  • 是的,对我来说没有什么特别的。也许只是仔细检查你的计算逻辑。使用 logcat 打印一些调试信息。第一次触摸时似乎没有正确设置或计算某些东西。

标签: android animation touch listener


【解决方案1】:

添加到每个视图和布局:

android:focusable="false"
android:focusableInTouchMode="false"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-27
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    • 1970-01-01
    相关资源
    最近更新 更多