2012-05-11 1 views
10

누구나 뷰 또는 레이아웃에 컬링 효과를 구현하는 것에 대한 아이디어를 얻을 수 있습니까? 나는 그것에 대해 많은 것들을 수색했지만 어떤 생각을 할 수는 없다. 나는이 다음 링크안드로이드에 페이지 컬 애니메이션?

https://github.com/harism/android_page_curl

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

그러나 모두 링크가 harism 코드로 시도 only.I 이미지, 난 그냥 하나의 레이아웃을 생성하고 내가 그것을 표시 한 후 비트 맵으로 변환하는 효과를 제공하는 데 사용되는 참조 그것은 나를 위해 성공했다.하지만 그것은보기처럼 작동하지 않는다. 정적 페이지를 의미합니다 (텍스트 크기를 초과하는 경우 스크롤바가 없음). 아이디어가 있으면 제안 해주세요.

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

} 

screenshot 비트 맵 데이터로 동적보기를 변환 한 다음 페이지 컬 라이브러리에 전달할 수 스 와이프

enter image description here

+3

youtube 당신이 그것을 위해 솔루션을받을 수 있습니까? ..... 그렇다면 당신은 저에게 알려주십시오. – Kalpesh

+0

당신이 추가 한 모든보기가 비트 맵으로 표시되기 때문에 harism의 코드를 사용하여 목표에 도달 할 수있는 방법이 없다고 생각합니다. –

+0

이것을 완료하면 코드를 공유하십시오. –

답변

5

하나의 샘플 코드를 찾았습니다.

mediafire

+0

매우 유용한 링크 – suja

+0

나는 책의 페이지가 돌린 안드로이드에서 플립 효과뿐만 아니라 컬 효과를 거쳤지 만, 내가 필요로하는 것은 책에 차례 효과가있다. 그러면 우리는 단단한 묶음으로 첫 번째와 마지막 표지가있는 책을 가지고있다. 선회 스타일은 컬 및 뒤집기 효과와 다를 수 있습니다. 그럼 어떤 사람이 이것을 구현하는 방법과 지원 링크 또는 자습서 또는 예제를 알려주십시오. (높이 평가 됨) 고맙습니다. – ask4solutions

+0

위의 링크가 더 이상 작동하지 않습니다. –

0

(실제보기를 숨기). 페이지 컬 효과가 완료되면보기를 복원 할 수 있습니다.

+0

이 작업을 수행 한 경우 코드를 공유하십시오. –