如何将 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();
我想创建 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();