运用贝塞尔曲线描绘android翻页效果

运用贝塞尔曲线描绘android翻页效果_第1张图片
如何使用

首先你需要创建Pager实例,并添加到布局中

DisplayMetrics displayMetrics = getResources().getDisplayMetrics();

screenWidth = displayMetrics.widthPixels;//获取屏幕的宽度

screenHeight = displayMetrics.heightPixels;

pager = new Pager(this, screenWidth, screenHeight);

FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

addContentView(pager, layoutParams);//将pager添加到布局中

Pager是核心代码,由它来控制手势实现翻书的。

  1. 分别创建俩组Bitmap、canvas。代表当前页和下一页的
mCurPageBitmap = Bitmap.createBitmap(screenWidth, screenHeight, Bitmap.Config.ARGB_8888);

mNextPageBitmap = Bitmap.createBitmap(screenWidth, screenHeight, Bitmap.Config.ARGB_8888);

mCurPageCanvas = new Canvas(mCurPageBitmap);

mNextPageCanvas = new Canvas(mNextPageBitmap);

pager.setBitmaps(mCurPageBitmap, mCurPageBitmap);//设置bitmap到pager中,初始时可以都设置成当前的bitmap
  1. 让Pager监听手
pager.setOnTouchListener(new View.OnTouchListener() {

//            private int count = pages.length;

//            private int currentIndex = 0;

//            private int lastIndex = 0;

//            private Bitmap lastBitmap = null;

@Override

public boolean onTouch(View v, MotionEvent e) {

boolean ret = false;

if (v == pager) {

if (e.getAction() == MotionEvent.ACTION_DOWN) {

pager.calcCornerXY(e.getX(), e.getY());//获得触碰的起始点位置,用于判断向左翻还是向右翻。

//                        lastBitmap = currentBitmap;

//                        lastIndex = currentIndex;

//

//                        pagerFactory.onDraw(mCurPageCanvas, currentBitmap);

//                        if (pager.DragToRight()) {    // 向右滑动,显示前一页

//                            if (currentIndex == 0) return false;

//                            pager.abortAnimation();

//                            currentIndex--;

//                            loadImage(mNextPageCanvas, currentIndex);

//                        } else {        // 向左滑动,显示后一页

//                            if (currentIndex + 1 == count) return false;

//                            pager.abortAnimation();

//                            currentIndex++;

//                            loadImage(mNextPageCanvas, currentIndex);

//                        }

} else if (e.getAction() == MotionEvent.ACTION_MOVE) {

} else if (e.getAction() == MotionEvent.ACTION_UP) {

//                        if (!pager.canDragOver()) {

//                            currentIndex = lastIndex;

//                            currentBitmap = lastBitmap;

//                        }

}

ret = pager.doTouchEvent(e);

return ret;

}

return false;

}

});

未注释的部分是必须要有的。

  1. 加载图片
pagerFactory = new PagerFactory(getApplicationContext());
private void loadImage(final Canvas canvas, int index) {

Bitmap bitmap = getBitmap(pages[index]);

currentBitmap = bitmap;

pagerFactory.onDraw(canvas, bitmap);

pager.setBitmaps(mCurPageBitmap, mNextPageBitmap);

pager.postInvalidate();

}

PagerFactory是用于渲染Bitmap的。

  1. 加载第一张图片
loadImage(mCurPageCanvas, 0);

demo下载http://download.csdn.net/detail/qq_35549248/9849843

你可能感兴趣的:(动画)