如何将 ArcProgress (lib) 添加到代号 1 中的 TitleBar?

How to add an ArcProgress (lib) to the TitleBar in codename one?

我想创建 Toolbar API 中描述的淡出效果。

但是我想要一张 ArcProgress(来自 Cn1Lib "CircleProgress")而不是静态图片。

不仅如此,ArcProgress 应该会逐渐消失,变成与 AP 具有相同填充百分比的 Slider

向下滚动表单时应该"fade into each other"。

有可能吗?如果是,如何?我已经研究了很长时间了,请提供代码示例。

编辑

在右侧,您会看到向下滚动前的屏幕。

左侧应该是工具栏中的滑块(不知道为什么没有显示)

向下滚动时,circleprogress(右)应该淡入滑块(左)

右边的代码

ap = new ArcProgress ();
ap.setUnselectedStyle(new Style(0xCCCCCCCC ,0xff0000 , Font.createSystemFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD, Font.SIZE_MEDIUM), (byte) 0b0));
ap.setProgress(10);

myForm.setTitleComponent  (ap); //works

左边的代码:

Slider jSlider = new Slider();
jSlider.setMaxValue(255);
jSlider.setMinValue(0);
jSlider.setProgress(50); 
jSlider.setEditable(true);
jSlider.setVisible(true);
jSlider.getAllStyles().setBgColor(0xff0000);
jSlider.getAllStyles().setFgColor(0xCCCCCCCC);
jSlider.getAllStyles().setBgTransparency(0b0);

myForm.setTitleComponent (jSlider); //does not work, for whatever reason

现在的主要问题是:

如何让circleprogress在向下滚动时消失,让Slider在向下滚动时出现?其次:为什么slider不显示?

这不应该是工具栏 API 的问题,如 here 所述。 请注意,在 the developer guide.

Toolbar 部分中有一个更完整的示例

您可以将任意组件放入工具栏并根据滚动位置为其设置动画 behavior/functionality。

Form hi = new Form("Hi World", BoxLayout.y());

ArcProgress ap = new ArcProgress ();
ap.setUnselectedStyle(new Style(0xCCCCCCCC ,0xff0000 , Font.createSystemFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD, Font.SIZE_MEDIUM), (byte) 0b0));
ap.setProgress(10);
Slider sl = new Slider();
sl.setProgress(10);
sl.getAllStyles().setOpacity(0);
sl.getSliderEmptyUnselectedStyle().setOpacity(0);
sl.getSliderFullUnselectedStyle().setOpacity(0);
sl.getSliderEmptySelectedStyle().setOpacity(0);
sl.getSliderFullSelectedStyle().setOpacity(0);
sl.getSliderEmptyUnselectedStyle().setBgTransparency(0);
sl.getSliderFullUnselectedStyle().setBgTransparency(0);
sl.getSliderEmptySelectedStyle().setBgTransparency(0);
sl.getSliderFullSelectedStyle().setBgTransparency(0);

hi.getToolbar().setTitleComponent  (LayeredLayout.encloseIn(sl, ap));

int slHeight = sl.getPreferredH();
int apHeight = ap.getPreferredH();
Motion height = Motion.createLinearMotion(apHeight, slHeight, 100);
Motion opacity = Motion.createLinearMotion(0, 255, 100);

ComponentAnimation cna = new ComponentAnimation() {

    @Override
    public boolean isInProgress() {
        return true;
    }

    @Override
    protected void updateState() {
        int s = getStep();
        height.setCurrentMotionTime(s);
        opacity.setCurrentMotionTime(s);
        int h = height.getValue();
        sl.setPreferredH(h);
        ap.setPreferredH(h);
        int o = opacity.getValue();
        sl.getSliderEmptyUnselectedStyle().setOpacity(o);
        sl.getSliderFullUnselectedStyle().setOpacity(o);
        sl.getSliderEmptySelectedStyle().setOpacity(o);
        sl.getSliderFullSelectedStyle().setOpacity(o);
        sl.getSliderEmptyUnselectedStyle().setBgTransparency(o);
        sl.getSliderFullUnselectedStyle().setBgTransparency(o);
        sl.getSliderEmptySelectedStyle().setBgTransparency(o);
        sl.getSliderFullSelectedStyle().setBgTransparency(o);
        sl.getAllStyles().setOpacity(o);
        ap.getAllStyles().setOpacity(255 - o);
    }
};

hi.getAnimationManager().onTitleScrollAnimation(cna);

for(int iter = 0 ; iter < 50 ; iter++) {
    hi.addComponent(new Label("Hi World"));
}
hi.show();