Страница Android Curl Animation от Harism показывает несоответствие в обратном подсчете индекса в методе getBitmap () CurlActivity ()? - PullRequest
2 голосов
/ 13 января 2012

Я использовал анимацию Page Curl Harism для своего приложения, но столкнулся с небольшой проблемой, я использую значение индекса в методе getBitmap() CurlActivity, мне нужно показывать номера страниц пользователю на каждомпереворот страницы (скажем, с помощью вызова Toast.maketext().show), это прекрасно работает при переходе от страницы 0 к pageCount.length, но когда я перемещаю страницу справа налево (страницы, то есть при переходе в другую сторону от pageCount.lenthк 0) значения индекса не уменьшаются постоянно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 ]

3 голосов
/ 19 октября 2012

Во-первых, Харизм, спасибо, что поделились этим прекрасным фреймворком!:)

Теперь только для дополнения ответа Харизма:

При работе с журналами, книгами и т. Д. Мы имеем дело с неопределенным количеством страниц.

ВПример, представленный в классе CurlActivity проекта Harism-Android-Page-Curl, использует «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 голос
/ 13 января 2012

Проблема в том, что вы действительно не можете полагаться на запрошенный индекс страницы с целью, которую пытаетесь реализовать. Причина поведения, с которым вы сталкиваетесь, заключается в том, что после пролистывания страниц вперед запрашивается только «следующая страница», и в этом случае индекс кажется тем, что вы ожидаете. Но изменение страниц в обратном направлении работает с точностью до наоборот, запрашивается только «предыдущая страница», и в индексе есть разрыв между этими отдельными операциями.

Существует метод CurlView.getCurrentIndex (), который постоянно устанавливается на индекс страницы, отображаемой справа. Это должно дать вам средства для отображения фактических номеров страниц.

...