Страница Android Curl Animation от Harism показывает несоответствие в обратном подсчете индекса в методе getBitmap() CurlActivity()?
Я использовал анимацию Page Curl Harism для своего приложения, но столкнулся с небольшой проблемой, я использую индекс Value в getBitmap()
метод CurlActivity, мне нужно показывать номера страниц пользователю при каждом повороте страницы (скажем, с помощью вызова Toast.maketext().show
), это прекрасно работает при переходе со страницы 0 на pageCount.length
, но когда я перемещаю страницу справа налево (страницы, то есть, когда идет в другую сторону от pageCount.lenth
к 0) значения индекса не уменьшаются последовательно.
Может кто-нибудь, пожалуйста, помогите мне с этим.
Заранее спасибо.
PS: это был бы мой первый вопрос по stackru
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 ответа
Проблема в том, что вы действительно не можете полагаться на запрошенный индекс страницы с целью, которую пытаетесь реализовать. Причина поведения, с которым вы сталкиваетесь, заключается в том, что после пролистывания страниц вперед запрашивается только "следующая страница", и в этом случае индекс кажется тем, что вы ожидаете. Но смена страниц в обратном направлении работает с точностью до наоборот, запрашивается только "предыдущая страница", и в индексе есть разрыв между этими отдельными операциями.
Существует метод CurlView.getCurrentIndex(), который постоянно устанавливается на индекс страницы, отображаемой справа. Это должно дать вам средства для отображения фактических номеров страниц.
Во-первых, Харизм, спасибо, что поделились этой прекрасной рамкой!:)
Теперь только для дополнения ответа Харизма:
При работе с журналами, книгами и т. Д. Мы имеем дело с неопределенным количеством страниц.
В примере, представленном в классе 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);
}}}
Я надеюсь, что помог!
И еще раз спасибо за рамки Харизма!