黑莓 - 如何创建像滑动抽屉android的布局

时间:2011-09-02 12:22:42

标签: layout blackberry user-interface

有没有人知道如何在黑莓手机中创建布局组件,其行为类似于android的滑动抽屉?

THX。

3 个答案:

答案 0 :(得分:0)

实际上没有做过。但我认为这里最大的困难是滑动动画部分和可见性恕我直言。您应该首先处理滑动效果的动画。然后是经理本身。

触控设备有另一个难点......您必须对滑动触控事件进行编程,使其遵循手势。

答案 1 :(得分:0)

嘿,为黑莓手机设置这样的布局确实是一个绝妙的主意。完成它是非常具有挑战性的。我们必须使用自定义布局。 首先要做的是管理者定制的知识。我相信我们也可以使用弹出屏幕将其滑动。经理在弹出屏幕上。 其次,Gusture api用于侧滚动。 所有最好的伙伴。

答案 2 :(得分:0)

请检查我在其中创建经理类的以下源代码。只需添加您想要滑动到该经理的任何内容并使用它。根据您的要求进行更改。

package mypackage;

import net.rim.device.api.ui.Graphics;
import net.rim.device.api.ui.Manager;
import net.rim.device.api.ui.TouchEvent;
import net.rim.device.api.ui.component.Dialog;
import net.rim.device.api.ui.component.LabelField;

public class SlidingDrawer extends Manager {
    final static int STATE_VIEW = 1;
    final static int STATE_HIDE = STATE_VIEW+1;
    final static int STATE_SLIDE_DOWN = STATE_HIDE+1;
    final static int STATE_SLIDE_UP = STATE_SLIDE_DOWN+1;
    final static int MAX_NO_OF_STATES = STATE_SLIDE_UP+1;
    static int CURRENT_STATE = STATE_VIEW;
    int i = 0;
    LabelField _lbl_hero;

    public SlidingDrawer(long arg0) {
    super(arg0);
        // TODO Auto-generated constructor stub
        init();
    }

    private void init()
    {
        _lbl_hero = new LabelField("Hero testing Every thign....");
        this.add(_lbl_hero);
    }

    protected void paint(Graphics graphics) {
        // TODO Auto-generated method stub
        switch(CURRENT_STATE)
        {
            case STATE_VIEW:
                super.paint(graphics);
                break;
            case STATE_HIDE:

                break;
            case STATE_SLIDE_DOWN:
                super.paint(graphics);
                if(i<this.getHeight())
                {
                    this.getField(0).setPadding(i++, 0, 0, 0);
                    invalidate();
                }
                else
                {
                    CURRENT_STATE = STATE_HIDE;
                }
                break;
            case STATE_SLIDE_UP:
                super.paint(graphics);
                if( i > 0 )
                {
                    this.getField(0).setPadding(i--, 0, 0, 0);
                    invalidate();
                }
                else
                {
                    CURRENT_STATE = STATE_VIEW;
                }
                break;
        }
    }
    public void setState(int state)
    {
        if(state < MAX_NO_OF_STATES)
        {
            CURRENT_STATE = state;
        }
        else
            Dialog.alert("Invalid State....");
    }
    protected boolean touchEvent(TouchEvent message) {
        // TODO Auto-generated method stub
        if(CURRENT_STATE == STATE_VIEW)
        {
            i=0;
            CURRENT_STATE = STATE_SLIDE_DOWN;
            invalidate();
        }
        else if(CURRENT_STATE == STATE_HIDE)
        {
//          i = this.getField(0).getContentRect().y;
            CURRENT_STATE = STATE_SLIDE_UP;
            invalidate();
        }
        return super.touchEvent(message);
    }
    protected void sublayout(int maxWidth, int maxHeight) {
        // TODO Auto-generated method stub
        setExtent(360, 100);//Width and Height of the Childs
    }
}

请根据您的要求更改此代码并使用它。