2012-05-11 15 views
10

Ai cũng có thể có ý tưởng về việc thực hiện hiệu ứng uốn cho các chế độ xem hoặc bố cục. Tôi đã tìm kiếm rất nhiều thứ về nó, nhưng tôi không thể có bất kỳ ý tưởng nào. Tôi tham khảo này liên kết sauTrang Curl Animation trong Android?

https://github.com/harism/android_page_curl

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

Nhưng cả hai liên kết được sử dụng để cung cấp cho hiệu ứng cho ảnh only.I thử với mã harism, tôi chỉ cần tạo một bố trí và chuyển đổi thành bitmap sau khi tôi hiển thị nó Nó đã thành công với tôi. Nhưng nó không hoạt động như một cái nhìn. Có nghĩa là chỉ là một trang tĩnh (không có thanh cuộn nếu kích thước văn bản vượt quá). Vui lòng đề nghị tôi liên quan đến điều này nếu có ý tưởng.

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); 
      } 
     } 
    } 

} 

ảnh chụp màn hình như thế này.

enter image description here

+3

Bạn có thể có được giải pháp cho nó? ..... Nếu có thì xin bạn cho tôi biết. – Kalpesh

+0

Tôi nghĩ rằng không có cách nào để đạt được mục tiêu của bạn bằng cách sử dụng mã của harism vì bất kỳ chế độ xem nào bạn thêm nó sẽ được hiển thị dưới dạng bitmap –

+0

Vui lòng chia sẻ một số nội dung mã nếu bạn đã thực hiện việc này. –

Trả lời

5

Tôi đã tìm thấy một mã mẫu.

youtube

mediafire

+0

Các liên kết rất hữu ích – suja

+0

Tôi đã trải qua hiệu ứng Curl cũng như hiệu ứng lật trong android, nơi các trang của sách được bật nhưng những gì tôi cần là hiệu ứng bật sách có nghĩa là khi chúng tôi có một cuốn sách với bìa đầu tiên và cuối cùng chuyển phong cách sẽ khác với curl và hiệu ứng lật. Vì vậy, hãy cho chúng tôi biết cách thực hiện điều này và bất kỳ liên kết hỗ trợ hoặc hướng dẫn hoặc ví dụ nào (được đánh giá cao) Cảm ơn bạn – ask4solutions

+0

Các liên kết trên không hoạt động nữa, Vui lòng chia sẻ một số nội dung nếu bạn đã thực hiện việc này. –

0

On swipe bạn có thể chuyển đổi quan điểm năng động của bạn thành một dữ liệu bitmap và sau đó vượt qua nó vào thư viện trang curl (giấu quan điểm thực tế). Sau khi hiệu ứng curl của trang đã hoàn tất, bạn có thể khôi phục chế độ xem của mình.

+0

Vui lòng chia sẻ một số nội dung mã nếu bạn đã thực hiện việc này. –