Harism的Android页面卷曲动画显示CurlActivity()的getBitmap()方法中的反向索引计数不一致?

时间:2012-01-12 20:39:11

标签: android animation curl page-curl

我已经在我的应用程序中使用了Harism的Page Curl动画,但是我遇到了一个小问题,我在CurlActivity的getBitmap()方法中使用索引值,我需要向用户显示页码在每次翻页时(比如使用对Toast.maketext().show的调用),这从第0页到pageCount.length时工作正常,但是当我从右向左移动页面时(页面,即在进行从pageCount.lenth到0的其他方式,索引值不会一直减少。

任何人都可以帮助我。

先谢谢。

P.S。:这是我关于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
}

2 个答案:

答案 0 :(得分:3)

首先,Harism,感谢您分享这个美丽的框架! :)

现在,只是为了补充Harism的反应:

在处理杂志,书籍等时,我们会处理不确定数量的页面。

在项目Harism-Android-Page-Curl的CurlActivity类中提供的示例中,使用“Switch”来控制页面。为了能够满足我的需求,我不得不改变方法“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!

答案 1 :(得分:1)

问题是你真的不能依赖于你试图实现的目的页面索引。您所面临的行为的原因是,一旦您向前翻页,只需要“下一页”,在这种情况下索引似乎是您所期望的。但是向后更改页面的工作正好相反,只需要“上一页”,并且这些单独操作之间的索引之间存在差距。

有一个方法CurlView.getCurrentIndex()虽然经常被设置为右侧显示的页面的索引。它应该为您提供显示实际页码的方法。