页面curlanimation在android?

任何人都可以有想法,实施视图或布局的冰壶效应。 我search了很多关于它的事情,但是我不明白。 我参考这个链接

https://github.com/harism/android_page_curl

http://code.google.com/p/android-page-curl/

但是这两个链接都只是用来给图片添加效果。我尝试了一些哈希码,我只是创build了一个布局,并在显示后转换成了位图。它成功了,但是它并不像一个视图。 意味着只是一个静态页面(如果超过文本大小没有滚动条)。 如果有任何想法,请给我build议。

public class CurlActivity extends Activity { private CurlView mCurlView; private BitmapDrawable[] bmp = new BitmapDrawable[7]; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); int index = 0; if (getLastNonConfigurationInstance() != null) { index = (Integer) getLastNonConfigurationInstance(); } mCurlView = (CurlView) findViewById(R.id.curl); mCurlView.setPageProvider(new PageProvider()); mCurlView.setSizeChangedObserver(new SizeChangedObserver()); mCurlView.setCurrentIndex(index); mCurlView.setBackgroundColor(0xFF202830); for (int i = 0; i < bmp.length; i++) { bmp[0] = (BitmapDrawable) getResources().getDrawable( R.drawable.obama); bmp[1] = (BitmapDrawable) getResources().getDrawable( R.drawable.road_rage); if (i < 2) continue; TextView b = new TextView(this); b.setLayoutParams(new LayoutParams(480, 854)); b.setText("page " + i); b.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18); b.setTextColor(Color.BLACK); b.setBackgroundColor(Color.WHITE); bmp[i] = new BitmapDrawable(loadBitmapFromView(b)); } // This is something somewhat experimental. Before uncommenting next // line, please see method comments in CurlView. // mCurlView.setEnableTouchPressure(true); } public static Bitmap loadBitmapFromView(View v) { Bitmap b = Bitmap.createBitmap(v.getLayoutParams().width, v.getLayoutParams().height, Bitmap.Config.ARGB_8888); Canvas c = new Canvas(b); v.layout(0, 0, v.getLayoutParams().width, v.getLayoutParams().height); v.draw(c); return b; } @Override public void onPause() { super.onPause(); mCurlView.onPause(); } @Override public void onResume() { super.onResume(); mCurlView.onResume(); } @Override public Object onRetainNonConfigurationInstance() { return mCurlView.getCurrentIndex(); } /** * Bitmap provider. */ private class PageProvider implements CurlView.PageProvider { // Bitmap resources. // private int[] mBitmapIds = { R.drawable.obama, R.drawable.road_rage, // R.drawable.taipei_101, R.drawable.world }; @Override public int getPageCount() { return 7; } private Bitmap loadBitmap(int width, int height, int index) { Bitmap b = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); b.eraseColor(0xFFFFFFFF); Canvas c = new Canvas(b); Drawable d = bmp[index]; // Drawable d = getResources().getDrawable(mBitmapIds[index]); int margin = 5; int border = 3; Rect r = new Rect(margin, margin, width - margin, height - margin); int imageWidth = r.width() - (border * 2); int imageHeight = imageWidth * d.getIntrinsicHeight() / d.getIntrinsicWidth(); if (imageHeight > r.height() - (border * 2)) { imageHeight = r.height() - (border * 2); imageWidth = imageHeight * d.getIntrinsicWidth() / d.getIntrinsicHeight(); } r.left += ((r.width() - imageWidth) / 2) - border; r.right = r.left + imageWidth + border + border; r.top += ((r.height() - imageHeight) / 2) - border; r.bottom = r.top + imageHeight + border + border; Paint p = new Paint(); /** * Border Color */ p.setColor(Color.RED); //p.setColor(0xFFC0C0C0); c.drawRect(r, p); r.left += border; r.right -= border; r.top += border; r.bottom -= border; d.setBounds(r); d.draw(c); return b; } @Override public void updatePage(CurlPage page, int width, int height, int index) { switch (index) { // First case is image on front side, solid colored back. case 0: { Bitmap front = loadBitmap(width, height, 0); page.setTexture(front, CurlPage.SIDE_FRONT); page.setColor(Color.rgb(180, 180, 180), CurlPage.SIDE_BACK); break; } // Second case is image on back side, solid colored front. case 1: { Bitmap back = loadBitmap(width, height, 2); page.setTexture(back, CurlPage.SIDE_BACK); page.setColor(Color.CYAN, CurlPage.SIDE_FRONT); break; } // Third case is images on both sides. case 2: { Bitmap front = loadBitmap(width, height, 1); Bitmap back = loadBitmap(width, height, 3); page.setTexture(front, CurlPage.SIDE_FRONT); page.setTexture(back, CurlPage.SIDE_BACK); break; } // Fourth case is images on both sides - plus they are blend against // separate colors. case 3: { Bitmap front = loadBitmap(width, height, 2); Bitmap back = loadBitmap(width, height, 1); page.setTexture(front, CurlPage.SIDE_FRONT); page.setTexture(back, CurlPage.SIDE_BACK); page.setColor(Color.argb(127, 170, 130, 255), CurlPage.SIDE_FRONT); page.setColor(Color.WHITE, CurlPage.SIDE_BACK); break; } // Fifth case is same image is assigned to front and back. In this // scenario only one texture is used and shared for both sides. case 4: Bitmap front = loadBitmap(width, height, 0); page.setTexture(front, CurlPage.SIDE_BOTH); page.setColor(Color.argb(127, 255, 255, 255), CurlPage.SIDE_BACK); break; } } } /** * CurlView size changed observer. */ private class SizeChangedObserver implements CurlView.SizeChangedObserver { @Override public void onSizeChanged(int w, int h) { if (w > h) { mCurlView.setViewMode(CurlView.SHOW_TWO_PAGES); mCurlView.setMargins(.1f, .05f, .1f, .05f); } else { mCurlView.setViewMode(CurlView.SHOW_ONE_PAGE); mCurlView.setMargins(.1f, .1f, .1f, .1f); } } } } 

这样的截图。

在这里输入图像说明

Solutions Collecting From Web of "页面curlanimation在android?"

我find了一个示例代码。

YouTube的

主人MediaFire

在刷卡上,您可以将dynamic视图转换为位图数据,然后将其传递给页面curl库(隐藏实际视图)。 页面curl效果完成后,您可以恢复您的视图。