当我进行3D转换时,视图停止一段时间,然后旋转两个视图包含第一个视图列表视图和地图,第二个视图列表视图两个视图都与数据库交互
(代码块固定)
/**
* Setup a new 3D rotation on the container view.
*
* @param position the item that was clicked to show a picture, or -1 to show the list
* @param start the start angle at which the rotation must begin
* @param end the end angle of the rotation
*/
private void applyRotation(int position, float start, float end) {
// Find the center of the container
final float centerX = mContainer.getWidth() / 2.0f;
final float centerY = mContainer.getHeight() / 2.0f;
final float centerX2 = mContainerView.getWidth() / 2.0f;
final float centerY2 = mContainerView.getHeight() / 2.0f;
// Create a new 3D rotation with the supplied parameter
// The animation listener is used to trigger the next animation
final Rotate3dAnimation rotation =
new Rotate3dAnimation(start, end, centerX, centerY, 310.0f, true);
rotation.setDuration(500);
rotation.setFillAfter(true);
rotation.setInterpolator(new AccelerateInterpolator());
rotation.setAnimationListener(new DisplayNextView(position));
mContainer.startAnimation(rotation);
//for view
final Rotate3dAnimation rotation2 =
new Rotate3dAnimation(start, end, centerX2, centerY2, 310.0f, true);
rotation2.setDuration(500);
rotation2.setFillAfter(true);
rotation2.setInterpolator(new AccelerateInterpolator());
//rotation2.setAnimationListener(new DisplayNextView(position));
mContainerView.startAnimation(rotation2);
}
/**
* This class listens for the end of the first half of the animation.
* It then posts a new action that effectively swaps the views when the container
* is rotated 90 degrees and thus invisible.
*/
private final class DisplayNextView implements Animation.AnimationListener {
private final int mPosition;
private DisplayNextView(int position) {
mPosition = position;
}
public void onAnimationStart(Animation animation) {
}
public void onAnimationEnd(Animation animation) {
mContainer.post(new SwapViews(mPosition));
}
public void onAnimationRepeat(Animation animation) {
}
}
/**
* This class is responsible for swapping the views and start the second
* half of the animation.
*/
private final class SwapViews implements Runnable {
private final int mPosition;
public SwapViews(int position) {
mPosition = position;
}
public void run() {
final float centerX = mContainer.getWidth() / 2.0f;
final float centerY = mContainer.getHeight() / 2.0f;
Rotate3dAnimation rotation;
final float centerX2 = mContainerView.getWidth() / 2.0f;
final float centerY2 = mContainerView.getHeight() / 2.0f;
Rotate3dAnimation rotation2;
if (mPosition==2) {
mButtonCounty.setVisibility(Button.GONE);
mButtonRadar.setVisibility(Button.VISIBLE);
mButtonRadar.requestFocus();
mNearShopsView.setVisibility(LinearLayout.GONE);
mCountyListView.setVisibility(RelativeLayout.VISIBLE);
mCountyListView.requestFocus();
rotation = new Rotate3dAnimation(90, 180, centerX, centerY, 310.0f, false);
rotation2 = new Rotate3dAnimation(90,180, centerX2, centerY2, 310.0f, false);
} else {
mButtonRadar.setVisibility(Button.GONE);
mButtonCounty.setVisibility(Button.VISIBLE);
mButtonCounty.requestFocus();
mCountyListView.setVisibility(RelativeLayout.GONE);
mNearShopsView.setVisibility(LinearLayout.VISIBLE);
mNearShopsView.requestFocus();
rotation = new Rotate3dAnimation(90, 0, centerX, centerY, 310.0f, false);
rotation2 = new Rotate3dAnimation(90,0, centerX2, centerY2, 310.0f, true);
}
rotation.setDuration(50);
rotation.setFillAfter(false);
rotation.setInterpolator(new DecelerateInterpolator());
mContainer.startAnimation(rotation);
rotation2.setDuration(50);
rotation2.setFillAfter(false);
rotation2.setInterpolator(new DecelerateInterpolator());
mContainerView.startAnimation(rotation2);
}
}
答案 0 :(得分:0)
在进行非3D交易时,你会得到这个“停止”吗?如果没有,那么您应该为您的观点启用DrawingCache
。这主要在TextViews中起作用,因为它们在动画的每一步都重绘自己。将View.setDrawingCacheEnabled(true);
设置为您的观看次数。