codenameone - 绘制自定义组件

标签 codenameone

这是两个问题:
1) 对于使用代号为 1 的简单 2D 图形游戏来说,重写 Componentpaint 成员是最佳方法吗?或者我什至不应该尝试它?
2) 为什么下面的代码绘制我的Component只是为了立即删除它?

我像这样初始化我的组件:

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

    Container mv = findContainerMainVisual();

    mv.addComponent(newC);
    mv.setShouldCalcPreferredSize(true);
    mv.animateLayout(200);
}

然后组件重写 paint 成员函数,如下所示:

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());
    }
}

最佳答案

查看 Poker demo在最新一批演示中可以看到的 Codename One 中,它采用了一种非常不同的方法,尽管覆盖绘制也应该可以正常工作。

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

我建议避免径向渐变,因为它们在某些平台上真的很慢。请参阅this关于性能。

关于codenameone - 绘制自定义组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21239559/

相关文章:

java - 代号“一个动画麻烦”(也在纸牌演示中)?

events - 如何为 CodenameOne TextField 中的每个更改获取事件

java - 如何从代号为 ConnectionRequest 的 http 和不安全的 https 站点获取响应? Android 10 中的 http 和 https 问题(在 Google Pixel 中)

ios - 升级到 ios 9.3 后调用 native 代码时应用程序崩溃

java - 动态更改 Tab UIID 在 codenameone 中无法正常工作

codenameone - 不支持的主要.次要版本 51.0

java - 调用 dispose 时,自定义对话框不会释放

java - 是否可以将 JavaFX 的 PerspectiveTransform 与新的 Canvas 类一起使用?

android - 代号一 - ToastBar when "No connectivity detected"

java - 代号一中的 HTML 解析,无需使用 XML 解析器