黑莓自定义按钮触摸/触控板冻结屏幕

时间:2014-01-09 16:15:56

标签: blackberry blackberry-eclipse-plugin blackberry-jde touch-event trackpad

我创建了一种具有多个垂直和水平现场管理器的网格。 photo of the final result 创建网格的代码是:

public class CategoriasScreen extends MainScreen {

private int colores [] = {Color.BLUE, Color.ALICEBLUE, Color.CHOCOLATE, Color.DARKORANGE, Color.YELLOW};
private int rows;

public CategoriasScreen(){
    VerticalFieldManager row;
    CategoriaFieldManager cat;
    HorizontalFieldManager par;
    EncodedImage eImage;
    LabelField lf;

    rows = 1;
    Font font = getFont().derive(Font.PLAIN, Font.getDefault().getHeight() - 8);        
    setTitle("Categorias");
    for(int i = 0; i < rows; i++){
        row = new VerticalFieldManager(Field.FIELD_VCENTER | Manager.USE_ALL_WIDTH | Field.NON_FOCUSABLE);
        par = new HorizontalFieldManager(Field.FIELD_HCENTER | Field.NON_FOCUSABLE);

        cat = new CategoriaFieldManager(i);
        eImage = EncodedImage.getEncodedImageResource("img/categoria" + i +".png");
        eImage = LoaderScreen.resize(eImage, (int) Display.getWidth() / 5, (int) Display.getHeight() / 5, true);
        cat.add(new BitmapField(eImage.getBitmap()));
        lf = new LabelField("Categoria " + i, Field.FIELD_HCENTER);
        lf.setFont(font);
        cat.add(lf);
        par.add(cat);

        cat = new CategoriaFieldManager(i + 2);
        eImage = EncodedImage.getEncodedImageResource("img/categoria" + (i + 2) +".png");
        eImage = LoaderScreen.resize(eImage, (int) Display.getWidth() / 5, (int) Display.getHeight() / 5, true);
        cat.add(new BitmapField(eImage.getBitmap()));
        lf = new LabelField("Categoria " + (i + 2), Field.FIELD_HCENTER);
        lf.setFont(font);
        cat.add(lf);
        par.add(cat);

        row.add(par);
        add(row);
        //add(cat);
    }

}
}

对于网格内的元素,我扩展了一个VerticalFieldManager并实现了FieldChangeListener:

public class CategoriaFieldManager extends VerticalFieldManager implements FieldChangeListener{

private int colores [] = {Color.BLUE, Color.ALICEBLUE, Color.CHOCOLATE, Color.DARKORANGE, Color.YELLOW};
private int _idCategoria;

public CategoriaFieldManager(int idCategoria){
    super(Field.FOCUSABLE);
    _idCategoria = idCategoria;
    setBackground(BackgroundFactory.createSolidBackground(colores[0]));
    this.setPadding(new XYEdges(15,30,10,30));
    this.setBorder(BorderFactory.createSimpleBorder(new XYEdges(20,20,20,20), Border.STYLE_TRANSPARENT));
    //cat.setCookie(new Integer(i));
    this.setChangeListener(this);
}

protected void sublayout(int width, int height){
    super.sublayout((int) Display.getWidth() / 5 , (int) Display.getWidth() / 5);
    setExtent((int) Display.getWidth() / 5, (int) Display.getWidth() / 5);
}

protected void onFocus(int direction){
    setBackground(BackgroundFactory.createSolidBackground(colores[1]));
}

protected void onUnfocus(){
    setBackground(BackgroundFactory.createSolidBackground(colores[0]));
}

public boolean isFocusable(){
    return true;
}
protected boolean touchEvent( TouchEvent message )    {
    int x = message.getX( 1 );        
    int y = message.getY( 1 );        
    if( x < 0 || y < 0 || x > getExtent().width || y > getExtent().height ) {
        // Outside the field            
        return false;       
    }        

    switch( message.getEvent() ) {                  
    case TouchEvent.UNCLICK:                
        fieldChangeNotify(0);               
        return true;        
    }        
    return super.touchEvent( message );    
}

   protected boolean navigationClick(int status, int time) {
      if (status != 0) {        // you did not have this check
         fieldChangeNotify(0);
      }
      return true;
   }
public void fieldChanged(Field field, int context) {
    UiApplication.getUiApplication().pushScreen( new ListadoEstablecimientosScreen(_idCategoria) );
    /*UiApplication.getUiApplication().invokeLater(new Runnable(){
        public void run() {
            Dialog.alert("hola mundo");
        }           
    });*/
}

}

我发现的问题是,当我触摸屏幕(任何地方)然后使用触控板时,手机会冻结,我必须重新启动才能再次使用它。然后是一个通知,说该应用程序使用了太多资源。如果它有助于我在BlackBerry Bold 9900中进行测试

0 个答案:

没有答案