android 翻页卷曲效果 电子书翻页
转载请注明来自:?5进制空间-android区
相信做电子书的同学,都遇到过翻页动画的需求吧,如果你不满足与点击滑动翻页的话,这边文章应该能够帮助到你。
先上个效果图:
效果还是很不错的,不过与ibook那个效果比起来,还是有差距的。应为这个没用到openGL做3D效果,只是用的2d的canvas画布去画的view,添加了阴影效果,还是挺有立体感的。而且比较流畅。openGL实现肯定效果会更好,不过就我目前的技术实力,实现希望还是渺茫的。
废话少说,还是上代码吧:
这里需要两个UI的view类和一个使用方法的demo。
第一个pageTurnerView.java:
?第二个view类pageView.java:
public class PageViewP1 extends RelativeLayout {public static final int CORNER_BOTTOM_LEFT = 0;public static final int CORNER_BOTTOM_RIGHT = 1;public static final int CORNER_TOP_LEFT = 2;public static final int CORNER_TOP_RIGHT = 3;private Path mClipPath;private PageTurnerViewP1 mPageTurner;private Callback mCallback;private int mCorner;private Drawable mBackPage;private Drawable mPageBackground; public PageViewP1(Context context) {super(context);} public PageViewP1(Context context, AttributeSet attrs ) {super(context, attrs ); this.mBackPage =this.getBackground();this.mCorner = -1;} void setPageTurner(PageTurnerViewP1 pageTurnerViewP1) {this.mPageTurner = pageTurnerViewP1;} void setClipPath(Path clipPath) {this.mClipPath = clipPath;} public void setCallback(Callback callback) {this.mCallback = callback;} void drawBackPage(Canvas canvas) { if (this.mCallback != null) this.mCallback.onDrawBackPage(canvas);} void drawBackground(Canvas canvas) {if (this.mCallback != null)this.mCallback.onDrawBackground(canvas);} public void startPageTurn() {if (this.mPageTurner != null)this.mPageTurner.startPageTurn(0);} void onPageTurnFinished(Canvas canvas) {this.mCallback.onPageTurnFinished(canvas);this.mClipPath = null;} protected void dispatchDraw(Canvas canvas) {if (this.mClipPath != null) {canvas.save();canvas.clipPath(this.mClipPath, Region.Op.INTERSECT);}super.dispatchDraw(canvas);if (this.mClipPath != null)canvas.restore();} public void setCorner(int corner) {this.mCorner = corner;} public int getCorner() {return this.mCorner;} public void setBackPage(Drawable backPage) {this.mBackPage = backPage;} public Drawable getBackPage() {return this.mBackPage;} public void setPageBackground(Drawable background) {this.mPageBackground = background;} public Drawable getPageBackground() {return this.mPageBackground;} public static abstract class Callback {public void onDrawBackPage(Canvas canvas) {Log.v("Callback", "drawing back page");}public void onDrawBackground(Canvas canvas) {Log.v("Callback2", "drawing back page");}public void onPageTurnFinished(Canvas canvas) {Log.v("Callback3", "drawing back page");}}}? ? ??转载请注明来自:?5进制空间-android区如果这两个view类没研究明白怎么用的话,可以去android 翻页卷曲效果里面寻找获取pageDemo.java,获得使用方法。