運用貝塞爾曲線描繪android翻頁效果

FanYe
如何使用

首先你需要創建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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章