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

来源:互联网 发布:重返十七岁电影知乎 编辑:程序博客网 时间:2024/06/09 08:43

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;@Overridepublic 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

阅读全文
1 0
原创粉丝点击