@Override public void onAnimationUpdate(ValueAnimator valueAnimator) { viewToMove.setCameraDistance((float) valueAnimator.getAnimatedValue()); } });
@Test @Config(minSdk = LOLLIPOP) public void cameraDistance() { view.setCameraDistance(100f); assertThat(view.getCameraDistance()).isEqualTo(100f); }
@Override public void onAnimationUpdate(ValueAnimator valueAnimator) { viewToMove.setCameraDistance((float) valueAnimator.getAnimatedValue()); } });
private void changeCameraDistance() { int distance = 8000; float scale = getResources().getDisplayMetrics().density * distance; if (mCardFrontLayout != null) { mCardFrontLayout.setCameraDistance(scale); } if (mCardBackLayout != null) { mCardBackLayout.setCameraDistance(scale); } }
view.setCameraDistance(maxCameraDistance); } else if (firstVisibleIndex == -1) { view.setCameraDistance(minCameraDistance); float ratio = (float) diff / (float) (getModel().getCount() - firstVisibleIndex); view.setCameraDistance( minCameraDistance + (maxCameraDistance - minCameraDistance) * ratio);
/** * Tilts the tabs, when overshooting at the start. * * @param angle * The angle, the tabs should be rotated by, in degrees as a {@link Float} value */ private void tiltOnStartOvershoot(final float angle) { ItemIterator iterator = new ItemIterator.Builder(getTabSwitcher(), tabViewRecycler).create(); AbstractItem item; while ((item = iterator.next()) != null) { View view = item.getView(); if (item.getIndex() == 0) { view.setCameraDistance(maxCameraDistance); getArithmetics().setPivot(Axis.DRAGGING_AXIS, item, getArithmetics() .getPivot(Axis.DRAGGING_AXIS, item, DragState.OVERSHOOT_START)); getArithmetics().setPivot(Axis.ORTHOGONAL_AXIS, item, getArithmetics() .getPivot(Axis.ORTHOGONAL_AXIS, item, DragState.OVERSHOOT_START)); getArithmetics().setRotation(Axis.ORTHOGONAL_AXIS, item, angle); } else if (item.isInflated()) { item.getView().setVisibility(View.INVISIBLE); } } }
/** * 3d 翻转 * @param context * @param view * @param duration * @param listenerAdapter */ public static void startRotation(Context context, View view, long duration, AnimatorListenerAdapter listenerAdapter) { // 改变视角距离, 贴近屏幕 int distance = 16000; float scale = context.getResources().getDisplayMetrics().density * distance; view.setCameraDistance(scale); //翻转动画 AnimatorSet animationSet = new AnimatorSet(); ObjectAnimator rotationYStart = ObjectAnimator.ofFloat(view, "rotationY", 0f, 90f); ObjectAnimator rotationYEnd = ObjectAnimator.ofFloat(view, "rotationY", -90f, 0f); animationSet.setDuration(duration); animationSet.playSequentially(rotationYStart,rotationYEnd); animationSet.start(); rotationYStart.addListener(listenerAdapter); }
@Override public void transformPage(View page, float position) { if (position <= -1) { /*页面已经在屏幕左侧且不可视*/ page.setAlpha(position); } else if (position <= 0) { /*页面从左侧进入或者向左侧滑出的状态*/ page.setAlpha(1 + position); page.setPivotY(page.getHeight() / 2); page.setPivotX(0); page.setCameraDistance(60000);/*调整摄像机的位置,避免出现糊脸的感觉*/ page.setRotationY((position * 180)); page.setTranslationX(position * -page.getWidth()); } else if (position <= 1) { /*页面从右侧进入或者向右侧滑出的状态*/ page.setTranslationX(position * -page.getWidth()); } else if (position > 1) { /*页面已经在屏幕右侧且不可视*/ page.setTranslationX(position * -page.getWidth()); } } }
@Override public void transformPage(View page, float position) { if (position < -1) { /* [-Infinity,-1)*/ /*页面已经在屏幕左侧且不可视*/ } else if (position <= 0) { /* [-1,0]*/ /*页面从左侧进入或者向左侧滑出的状态*/ page.setCameraDistance(60000); page.setAlpha(1 + position); page.setTranslationX(page.getWidth() * -position); page.setPivotX(0); page.setRotationY(position * 90); } else if (position <= 1) {/* (0,1]*/ /*页面从右侧进入或者向右侧滑出的状态*/ page.setCameraDistance(60000); page.setTranslationX(page.getWidth() * -position); page.setPivotX(0); page.setRotationY(position * 90); page.setAlpha(1 - position); } else if (position > 1) { /*页面已经在屏幕右侧且不可视*/ } } }
page.setCameraDistance(10000); page.setRotationY(position * 180); } else if (position <= 1) { page.setPivotY(page.getHeight() / 2); page.setTranslationX(position * -page.getWidth()); page.setCameraDistance(10000); page.setRotationY(-180 - (1 - position) * 180); } else if (position >= 1) {
@Override protected void onTransform(View view, float position) { float percentage = 1 - Math.abs(position); view.setCameraDistance(12000); setVisibility(view, position); setTranslation(view); setSize(view, position, percentage); setRotation(view, position, percentage); }
@Override protected void onTransform(View view, float position) { float percentage = 1 - Math.abs(position); if(Build.VERSION.SDK_INT >= 13){ view.setCameraDistance(12000); } setVisibility(view, position); setTranslation(view); setSize(view, position, percentage); setRotation(view, position, percentage); }
@Override public void transformPage(View page, float position) { if (position <=-1) { /* [-Infinity,-1)*/ /*页面已经在屏幕左侧且不可视*/ } else if (position <= 0) { /* [-1,0]*/ /*页面从左侧进入或者向左侧滑出的状态*/ page.setCameraDistance(100000); page.setPivotX(page.getMeasuredWidth()); page.setPivotY(page.getMeasuredHeight()*0.5f); page.setRotationY(90*position); } else if (position <= 1) {/* (0,1]*/ /*页面从右侧进入或者向右侧滑出的状态*/ page.setCameraDistance(100000); page.setPivotX(0); page.setPivotY( page.getWidth()*(0.5f)); page.setRotationY(90*position); }else if (position >1){ /*页面已经在屏幕右侧且不可视*/ } } }
@Override public void transformPage(View page, float position) { if (position < -1) { /* [-Infinity,-1)*/ /*页面已经在屏幕左侧第一个*/ page.setCameraDistance(10000); page.setPivotX(page.getWidth()/2); page.setPivotY(page.getWidth()); page.setRotationY(20); } else if (position <= 0) { /* [-1,0]*/ /*页面从左侧进入或者向左侧滑出的状态*/ page.setCameraDistance(10000); page.setPivotX(page.getWidth()/2); page.setPivotY(page.getWidth()); page.setRotationY(-20+(1-position)*20); } else if (position <= 1) {/* (0,1]*/ /*页面从右侧进入或者向右侧滑出的状态*/ page.setCameraDistance(10000); page.setPivotX(page.getWidth()/2); page.setPivotY(page.getWidth()); page.setRotationY(-20+(1-position)*20); } else if (position<=2) { /*页面已经在屏幕右侧第一个*/ page.setCameraDistance(10000); page.setPivotX(page.getWidth()/2); page.setPivotY(page.getWidth()); page.setRotationY(-20); } } }
@Override public void transformPage(View page, float position) { page.setTranslationX(page.getWidth() * -position); page.setTranslationY(page.getHeight() * position); page.setCameraDistance(10000F); if(position < -1){ page.setRotationX(0F); }else if(position <= 0){ page.setPivotX(page.getWidth()/2); page.setPivotY(page.getHeight()); page.setRotationX(MAX_ROTATE * -position); }else if(position <= 1){ page.setPivotX(page.getWidth()/2); page.setPivotY(0F); page.setRotationX(MAX_ROTATE * -position); }else { page.setRotationX(0F); } } }
@Override public void transformPage(View page, float position) { page.setCameraDistance(10000F); if(position < -1){ /*page.setPivotX(page.getWidth()); page.setPivotY(page.getHeight()/2); page.setRotationY(-MAX_ROTATE);*/ }else if(position <= 0){ page.setPivotX(page.getWidth()); page.setPivotY(page.getHeight()/2); page.setRotationY(MAX_ROTATE * position); }else if(position <= 1){ page.setPivotX(0F); page.setPivotY(page.getHeight()/2); page.setRotationY(MAX_ROTATE * position); }else { /*page.setPivotX(0F); page.setPivotY(page.getHeight()/2); page.setRotationY(MAX_ROTATE);*/ } } }