public void reloadTexture(int frontIndex, View frontView, int backIndex, View backView) { synchronized (this) { if (frontView != null) { if (backCards.getView() == frontView) { frontCards.setView(-1, null); swapCards(); } } if (backView != null) { if (frontCards.getView() == backView) { backCards.setView(-1, null); swapCards(); } } boolean frontChanged = frontCards.setView(frontIndex, frontView); boolean backChanged = backCards.setView(backIndex, backView); if (AphidLog.ENABLE_DEBUG) AphidLog.d( "reloading texture: %s and %s; old views: %s, %s, front changed %s, back changed %s", frontView, backView, frontCards.getView(), backCards.getView(), frontChanged, backChanged); if (frontIndex == activeIndex) { if (angle >= 180) angle -= 180; else if (angle < 0) angle += 180; } else if (backIndex == activeIndex) { if (angle < 0) angle += 180; } // AphidLog.i("View changed: front (%d, %s), back (%d, %s), angle %s, activeIndex %d", // frontIndex, frontView, backIndex, backView, angle, activeIndex); } }
public synchronized boolean handleTouchEvent(MotionEvent event, boolean isOnTouchEvent) { float delta; switch (event.getAction()) { case MotionEvent.ACTION_DOWN: lastY = event.getY(); lastX = event.getX(); return isOnTouchEvent; case MotionEvent.ACTION_MOVE: if (orientationVertical) { delta = lastY - event.getY(); } else { delta = lastX - event.getX(); } if (Math.abs(delta) > controller.getTouchSlop()) setState(STATE_TOUCH); // XXX: initialize views? if (state == STATE_TOUCH) { forward = delta > 0; // We only want to know the direction of the last movement controller.showFlipAnimation(); final float angleDelta; if (orientationVertical) { angleDelta = 180 * delta / controller.getContentHeight() * MOVEMENT_RATE; } else { angleDelta = 180 * delta / controller.getContentWidth() * MOVEMENT_RATE; } angle += angleDelta; if (backCards.getIndex() == -1) { if (angle >= MAX_TIP_ANGLE) angle = MAX_TIP_ANGLE; } else if (backCards.getIndex() == 0) { if (angle <= 180 - MAX_TIP_ANGLE) angle = 180 - MAX_TIP_ANGLE; } if (angle < 0) { if (frontCards.getIndex() > 0) { activeIndex = frontCards.getIndex() - 1; // xxx controller.flippedToView(activeIndex); } else { swapCards(); frontCards.setView(-1, null); if (-angle >= MAX_TIP_ANGLE) angle = -MAX_TIP_ANGLE; angle += 180; } } if (orientationVertical) { lastY = event.getY(); } else { lastX = event.getX(); } controller.getSurfaceView().requestRender(); return true; } return isOnTouchEvent; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: if (state == STATE_TOUCH) { if (orientationVertical) { delta = lastY - event.getY(); rotateBy(180 * delta / controller.getContentHeight() * MOVEMENT_RATE); } else { delta = lastX - event.getX(); rotateBy(180 * delta / controller.getContentWidth() * MOVEMENT_RATE); } if (frontCards.getIndex() == -1) // If at the first or last card forward = true; else if (backCards.getIndex() == -1) forward = false; setState(STATE_AUTO_ROTATE); controller.getSurfaceView().requestRender(); } return isOnTouchEvent; } return false; }