Skew/Flip ViewPager 中的布局
Skew/Flip Layout in ViewPager
我有一个 ViewPager,我在其中覆盖 onPageScrolled
以接收用户滚动的数量。然后我需要根据从滚动方法收到的 positionOffset
翻转视图。我想实现这样的目标。翻转所选视图旁边的所有视图。
在我的 PageLayout
的 onDraw
方法中,我有以下代码试图根据收到的偏移量倾斜 canvas。
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Matrix matrix = canvas.getMatrix();
camera.save();
camera.rotateX(skew);
camera.getMatrix(matrix);
camera.restore();
canvas.concat(matrix);
}
看起来这只是从左边歪斜了:
如何从右边实现同样的效果?如果它不仅倾斜它而且改变高度所以它给人一种轻微翻转的错觉,那就太好了。
像这样改变视角使它起作用。
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Matrix matrix = canvas.getMatrix();
camera.save();
camera.rotateX(-skew);
camera.rotateY(0);
camera.rotateZ(0);
camera.getMatrix(matrix);
int centerX = canvas.getWidth() / 2;
int centerY = canvas.getHeight() / 2;
matrix.preTranslate(-centerX, -centerY); //This is the key to getting the correct viewing perspective
matrix.postTranslate(centerX, centerY);
camera.restore();
canvas.concat(matrix);
}
我有一个 ViewPager,我在其中覆盖 onPageScrolled
以接收用户滚动的数量。然后我需要根据从滚动方法收到的 positionOffset
翻转视图。我想实现这样的目标。翻转所选视图旁边的所有视图。
在我的 PageLayout
的 onDraw
方法中,我有以下代码试图根据收到的偏移量倾斜 canvas。
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Matrix matrix = canvas.getMatrix();
camera.save();
camera.rotateX(skew);
camera.getMatrix(matrix);
camera.restore();
canvas.concat(matrix);
}
看起来这只是从左边歪斜了:
如何从右边实现同样的效果?如果它不仅倾斜它而且改变高度所以它给人一种轻微翻转的错觉,那就太好了。
像这样改变视角使它起作用。
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Matrix matrix = canvas.getMatrix();
camera.save();
camera.rotateX(-skew);
camera.rotateY(0);
camera.rotateZ(0);
camera.getMatrix(matrix);
int centerX = canvas.getWidth() / 2;
int centerY = canvas.getHeight() / 2;
matrix.preTranslate(-centerX, -centerY); //This is the key to getting the correct viewing perspective
matrix.postTranslate(centerX, centerY);
camera.restore();
canvas.concat(matrix);
}