Делать переходы экрана, когда пользователь нажимает на растровое изображение - PullRequest
1 голос
/ 25 января 2011

Я работаю над приложением для электронных книг, где мне нужно перемещать экраны слева направо и справа налево. Я перепробовал много образцов, которые нашел, но мне это не удалось. Как часто менять экран, когда пользователь нажимает на экран слева направо и справа налево. Какова основная идея для перехода страниц. Я просмотрел ветку форума поддержки разработчиков "эффект переворота страницы" в поисках решения, но не вижу его.

Следующий код не логичен. В каком положении я должен реализовать эффект переворачивания для перелистывания страниц на экране и как это реализовать?

public class TransitionScreen extends FullScreen implements Runnable{

     private int angle = 0;
     Bitmap fromBmp,toBmp;

    public TransitionScreen(){

    }
    public TransitionScreen(AnimatableScreen from,AnimatableScreen to) {

           fromBmp = new Bitmap(Display.getWidth(), Display.getHeight());
           toBmp = new Bitmap(Display.getWidth(), Display.getHeight());
         Graphics fromGraphics =  Graphics.create(fromBmp);
         Graphics toGraphics =  Graphics.create(toBmp);

         Object eventLock = getApplication().getEventLock();

         synchronized(eventLock) {

              from.drawAnimationBitmap(fromGraphics);

              to.drawAnimationBitmap(toGraphics);
             // Interpolate myOffset to target

             // Set animating = false if myOffset = target

             invalidate();
         } 

        try {
            synchronized (Application.getEventLock()) {
                Ui.getUiEngine().suspendPainting(true);
            }

        } catch (final Exception ex) {

        }

    }

    protected void paint(Graphics g){

           //control x,y positions of the bitmaps in the timer task and the paint will just paint where they go

        g.drawBitmap(0,0, 360,
                480, toBmp, 0, 0);
        g.drawBitmap(0, 0, 360,
                480, fromBmp, 0, 0);     
//      invalidate();

        }

    protected boolean touchEvent(TouchEvent event) {
        if (!this.isFocus())
            return true;
        if (event.getEvent() == TouchEvent.CLICK) {      

    //      invalidate();
        }
        return super.touchEvent(event);
    }

}

1 Ответ

3 голосов
/ 25 января 2011

Если вы работаете с версией 5.0 или более поздней версии ОС, на этой странице приведен простой пример:

http://docs.blackberry.com/en/developers/deliverables/11958/Screen_transitions_detailed_overview_806391_11.jsp

Откуда вы взяли пример кода, размещенный в вашем вопросе? Кажется, этот код не подходит для работы.

Обновление: Вы действительно можете довольно просто анимировать такие переходы. Предполагая, что вы знаете, как использовать класс Timer, у вас в основном есть переменная уровня класса, в которой хранится текущая x-позиция вашего первого растрового изображения (переменная изначально будет иметь значение 0). В каждом тике таймера вы вычитаете некоторую сумму из x-позиции (сколько бы пикселей вы не хотели перемещать каждый тик), а затем вызываете invalidate();.

Затем при каждом вызове метода рисования вы просто рисуете первое растровое изображение, используя переменную x-position для параметра x вызова, и рисуете второе растровое изображение, используя переменную x-position plus ширина первого растрового изображения. В результате получается, что первое растровое изображение сдвигается влево, а второе - справа.

A предостережение : поскольку это java (что означает, что события таймера не в реальном времени - они не гарантированно происходят, когда вы этого хотите), эта анимация будет несколько ошибочной и негладкий. Лучший способ получить плавную анимацию, подобную этой, - это предварительно визуализировать ваши анимационные ячейки (где каждая представляет собой прогрессивную комбинацию двух растровых изображений, между которыми вы переходите), так что в методе рисования вы просто рисуете одну предварительную отображаемое растровое изображение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...