Codenameone 绘制自定义组件

Codenameone 绘制自定义组件,codenameone,Codenameone,这是两个问题: 1) 覆盖组件的绘制成员是否是使用codename one的简单2D图形游戏的最佳方法?或者我甚至不应该尝试它?? 2) 为什么下面的代码绘制我的组件只是为了立即擦除它 我初始化我的组件,如下所示: protected void StartGame() { final Component newC = new PaintedComponent(); Container mv = findContainerMainVisual(); mv.addComp

这是两个问题:
1) 覆盖
组件的
绘制
成员
是否是使用codename one的简单2D图形游戏的最佳方法?或者我甚至不应该尝试它??
2) 为什么下面的代码绘制我的
组件
只是为了立即擦除它

我初始化我的组件,如下所示:

protected void StartGame()
{
    final Component newC = new PaintedComponent();

    Container mv = findContainerMainVisual();

    mv.addComponent(newC);
    mv.setShouldCalcPreferredSize(true);
    mv.animateLayout(200);
}
public class PaintedComponent extends Component {
    private int nextColour;

    public PaintedComponent() {
        super();
        setSize(new Dimension(200,200));
        nextColour = 0x8f8f8f;
    }


    @Override
    public void paint(Graphics g) {
        super.paint(g); // I've tried without this, but it's the same
        g.setColor(0xffffff);
        g.fillRadialGradient(0xffffff, nextColour, 0,0,this.getWidth(), this.getHeight());
    }
}
然后,组件将覆盖
绘制
成员函数,如下所示:

protected void StartGame()
{
    final Component newC = new PaintedComponent();

    Container mv = findContainerMainVisual();

    mv.addComponent(newC);
    mv.setShouldCalcPreferredSize(true);
    mv.animateLayout(200);
}
public class PaintedComponent extends Component {
    private int nextColour;

    public PaintedComponent() {
        super();
        setSize(new Dimension(200,200));
        nextColour = 0x8f8f8f;
    }


    @Override
    public void paint(Graphics g) {
        super.paint(g); // I've tried without this, but it's the same
        g.setColor(0xffffff);
        g.fillRadialGradient(0xffffff, nextColour, 0,0,this.getWidth(), this.getHeight());
    }
}
查看您在最新一批演示中看到的in-Codename One,它采用了一种非常不同的方法,尽管覆盖绘画也可以正常工作

组件未显示的原因是,当animateLayout()方法验证屏幕时,其大小为0。您应该将其放置在边框布局的中心(以占用所有可用空间并禁用滚动),或者覆盖calcPreferredSize()以返回合理的大小


我建议避免使用径向梯度,因为在某些平台上它们的速度非常慢。有关性能,请参阅。

谢谢。是的,我看过扑克演示,但我不认为我可以通过移动组件来获得我想要的效果-虽然这主意很酷:)如果我想显示一个对象围绕另一个对象旋转,你认为我可以使用“扑克技术”来实现吗?此外,覆盖
calcPreferredSize()
似乎什么也做不了,但是,
center of border layout
起到了很好的作用:)我很难从描述中分辨出来,但是您可以创建自己的布局管理器,并使用它以任何方式定位组件。布局管理器实际上非常容易创建,《开发人员指南》中有一个这样做的示例。