【发布时间】: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