2012-01-12 4 views
2

내 응용 프로그램에 Harism의 Page Curl 애니메이션을 사용했지만 CurlActivity의 getBitmap() 메소드에서 인덱스 값을 사용하고 있는데, 모든 플립에서 사용자에게 페이지 번호를 표시해야합니다. (Toast.maketext(). show에 대한 호출 사용),이 페이지 0에서 pageCount.length 이동하는 동안 잘 작동하지만 페이지를 오른쪽으로 이동하면 (즉, 페이지, 즉 다른 방법으로 이동하는 동안 pageCount.lenth to 0) 인덱스 값이 일관되게 감소되지 않습니다.Android 페이지 Curl Animation by Harism은 CurlActiviy()의 getBitmap() 메소드에서 역 색인 수의 불일치를 보여줍니다.

아무도 도와 주실 수 없습니까?

미리 감사드립니다.

P.S.:That는

  public Bitmap getBitmap(int width, int height, int index) { 
     Bitmap b = Bitmap.createBitmap(width, height, 
       Bitmap.Config.ARGB_8888); 
     b.eraseColor(0xFFFFFFFF); 
     Canvas c = new Canvas(b); 

     //this is where index seems to go wrong on reverse counting, I believe 

     Log.e("PAGE--", ""+index); 
     Toast.makeText(CurlActivity.this, ""+index, Toast.LENGTH_SHORT).show(); 

     Drawable d = getResources().getDrawable(mBitmapIds[index]); 

     int margin = 7; 
     int border = 3; 

답변

1

문제는 당신이 정말로 당신이 구현하려고 목적에 요청 된 페이지의 인덱스에 의존 할 수 없다는 것입니다 유래 내 첫 번째 질문이 될 것입니다. 당신이 직면하고있는 행동의 이유는 일단 페이지를 넘기면 '다음 페이지'만이 요구된다는 것입니다.이 경우 색인은 예상 한 것처럼 보입니다. 그러나 페이지를 뒤쪽으로 바꾸는 것은 정반대로 작동하며 '이전 페이지'만 요청되며 이러한 별도의 작업 사이에는 색인 내에 간격이 있습니다.

CurlView.getCurrentIndex() 메서드가 있는데, 오른쪽에 표시되는 페이지의 인덱스로 계속 설정됩니다. 실제 페이지 번호를 표시 할 수있는 방법을 제공해야합니다.

+0

먼저 저에게 알려주세요. 당신이 안드로이드의 페이지 컬로 모든 것을 제공 해준 놀라운 작품에 감사드립니다. getBitmap() 메서드 내부에서 CurlView 클래스의 getCurrentIndex 메서드에서 mCurrentIndex를 표시하는 방법을 시도했지만 getCurrentIndex 메서드가 오른쪽 페이지의 개수를 역순으로 증가시키는 것으로 보입니다. 뒤집기 (즉, 페이지를 왼쪽에서 오른쪽으로 이동), 첫 페이지로 다시 돌아가는 것은 처음 값을 가져 오지 않습니다 (시작 위치에서 다시 가져 오지 못합니다). 여기서 나는 어디로 가고 있습니까? –

+1

그래, 제 질문에 대한 답변을 Curl보기 클래스에서만 제안했듯이 getBitmap 메서드에서 페이지 인덱스를 가져 오는 중 틀리게되었습니다. 건배 !!! –

+0

@ 누군가 어떤 방법으로 솔루션을 공유 할 수 있습니까?어디에서 정확히 그것을 달성하기 위해 변경을 했습니까? 동일한 문제에 갇혀 있어요. getCurrentIndexFunction을 변경 했습니까? – Prateek

3

첫째, 할리즘,이 아름다운 프레임 워크를 공유해 주셔서 감사합니다! :)

지금 만 Harism의 응답을 보완하기 :

잡지, 책 등과 협력, 우리는 페이지의 불확 실한 양을 처리합니다.

프로젝트 Harism-Android-Page-Curl의 CurlActivity 클래스에있는 예에서 "스위치"를 사용하여 페이지를 제어합니다. 필자의 요구를 충족시키기 위해 필자는 페이지 수에 관계없이 "updatePage"메서드를 변경 한 다음 내 잡지를 더 적절하게 제어해야했습니다.

내 필요는 지수에 따라, 아래의 윤곽을 제시했고 현재 방향 장치 (메소드 서명 자체의) :

(다음 페이지에 "뒷면") 가로 방향

색인 | 페이지 왼쪽 | 페이지 오른쪽

0 | 0 | 1

1 | 2 | 3

2 | 4 | 4

3 | 6 | 7

4 | 8 | 9


세로 방향

지수 (미러링 같은 페이지에 "뒷면") | 페이지

0 | 0

1 | 1

2 | 2

3 | 3

4 | 4

....

먼저 따라서 방법 getPageCount을 변경해야,이 방식을 구현하려면 :

public int getPageCount() { 
     //return 5; 

     int pagesCount = 0; 

     DisplayMetrics displaymetrics = new DisplayMetrics(); 
     getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
     int wwidth = displaymetrics.widthPixels; 
     int hheight = displaymetrics.heightPixels; 

     if(wwidth > hheight){ 
      if((mBitmapIds.length % 2) > 0) 
       pagesCount = (mBitmapIds.length/2) + 1; 
      else 
       pagesCount = mBitmapIds.length/2; 
     }else{ 
      pagesCount = mBitmapIds.length; 
     } 
     return pagesCount; 
    } 

이 페이지 카운터가 실제 페이지 수를 반환 할 수 있습니다.


그런 다음 메소드 updatePage을 변경, 아래의 코드를 준수합니다

public void updatePage(CurlPage page, int width, int height, int index) { 

     DisplayMetrics displaymetrics = new DisplayMetrics(); 
     getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
     int wwidth = displaymetrics.widthPixels; 
     int hheight = displaymetrics.heightPixels; 

     if(wwidth > hheight){ 

      System.out.println("case landscape orientation..."); 
      Bitmap front = loadBitmap(width, height, (index * 2)); 
      Bitmap back = loadBitmap(width, height, (index * 2) + 1); 

      Matrix matrix = new Matrix(); 
      matrix.preScale(-1.0f, 1.0f); 
      Bitmap mirroredBitmap = Bitmap.createBitmap(back, 0, 0, back.getWidth(), back.getHeight(), matrix, false); 

      page.setTexture(front, CurlPage.SIDE_FRONT); 
      page.setTexture(mirroredBitmap, CurlPage.SIDE_BACK); 

     }else{ 

      System.out.println("case portrait orientation..."); 
      Bitmap front = loadBitmap(width, height, index); 
      Bitmap back = loadBitmap(width, height, index); 

      page.setTexture(front, CurlPage.SIDE_FRONT); 
      page.setTexture(back, CurlPage.SIDE_BACK); 

     }}} 

는 내가 도움을 바랍니다!

그리고 다시 한번 프레임 워크 Harism에 감사드립니다!

+0

특정 페이지의 이전 페이지로 돌아가는 것에 대해 도움을 줄 수 있습니까? – Prateek

+0

@prateek 스 와이프 동작으로 뒷 페이지를 의미합니까 (예 : 왼쪽에서 오른쪽으로 스 와이프)? 그렇다면 updatePage (..) 메서드는 int index를 매개 변수로받으며이 인덱스는 스 와이프의 방향에 따라 증가 또는 감소 할 수 있으므로 구현이 없습니다. –

+0

하지만 내가 직면 한 문제는 이전 페이지로 돌아 가려 할 때 해당 페이지의 올바른 비트 맵이 새로 고쳐지지 않는다는 것입니다. – Prateek