2

アプリケーションにHarismのページカールアニメーションを使用しましたが、小さな問題に直面していますgetBitmap()。CurlActivityのメソッドでインデックス値を使用しています。ページをめくるたびにページ番号をユーザーに表示する必要があります(たとえば、 )の呼び出しを使用するとToast.maketext().show、これはページ0からpageCount.lengthに移動するときに正常に機能しますが、ページを右から左に移動すると(つまり、ページを0に移動するときにpageCount.lenth)、インデックス値が一貫して減少しません。

誰かがこれを手伝ってくれませんか。

前もって感謝します。

PS:それはstackoverflowに関する私の最初の質問になります

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;

        return b
}
4

2 に答える 2

3

まず、ハリズム、この美しいフレームワークを共有していただきありがとうございます!:)

さて、ハリズムの反応を補完するためだけに:

雑誌や本などを扱うときは、未定のページ数を扱います。

プロジェクト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に感謝します!

于 2012-10-18T20:59:28.140 に答える
1

問題は、実装しようとする意図で、要求されたページインデックスに実際に依存できないことです。あなたが直面している振る舞いの理由は、ページを前にめくると、「次のページ」だけが要求されるためです。この場合、インデックスはあなたが期待しているもののようです。ただし、ページを逆方向に変更すると、まったく逆に機能し、「前のページ」のみが要求され、これらの個別の操作の間のインデックス内にギャップがあります。

メソッドCurlView.getCurrentIndex()がありますが、これは常に右側に表示されているページのインデックスに設定されています。実際のページ番号を表示するための手段を提供する必要があります。

于 2012-01-12T21:11:28.470 に答える