【问题标题】:Use of subpaint() on Mainscreen Doesn't paint child correctly在主屏幕上使用 subpaint() 无法正确绘制子项
【发布时间】:2011-08-02 21:14:10
【问题描述】:

要快速了解问题的背景,请参阅 Create Transparent Mainscreen in Blackberry .

我面临的问题是在主屏幕上绘画孩子。 我希望我的主屏幕看起来像原始要求一样透明/半透明,并添加我的其他 UI 元素,例如经理/领域在它上面。

所以我使用的 UI 元素是 3 个 BitmapField(s),应该使用 BorderFactory.createSimpleBorder() 创建粗边框,并为 Field.VISUAL_STATE_FOCUS 和 Field.VISUAL_STATE_NORMAL 状态添加两种颜色。所有这些 BitmapFields 都被添加到它们各自的 Horizo​​ntalFieldManger 中,而 Horizo​​ntalFieldManger 又被添加到屏幕上。

所以问题的一部分是,当我在这些 BitmapFields 中进行导航时,添加到 BitmapFields 的边框的“某些区域”没有按照指定的状态(正常、焦点)进行绘制。

其他问题是,在 Torch 9800 上,当我从上到下导航时,我看到默认滚动发生,这应该是正常的,但是在每次滚动时,当移动发生在屏幕上时,我的 BitmapField 会在屏幕上留下一些尾巴/裂缝滚动。

当我使用普通屏幕(不使用 subpaint 使屏幕透明)时,不会发生此类事情。

你知道这里发生了什么吗..?

  • 大奥

【问题讨论】:

  • 我已经阅读了您的两个问题,但我不明白透明主屏幕是什么。你想看到“透明度”在哪里?主屏幕后面没有任何东西可以让透明度通过。
  • 嗨迈克尔,谢谢你的问题。我的应用程序有一个默认的主屏幕,我允许用户通过菜单选择一个选项来进入新屏幕。用户选择的新主屏幕应该显示其内容,但同时用户应该能够看到旧/上一个屏幕的内容。为此,新屏幕应具有透明度以让用户看穿。希望这能有所帮助——
  • hmmm.... BB 不是只向堆栈上最顶部的屏幕发出绘制命令吗?因此,在底层屏幕上被遮挡的任何像素(实际上只是残留的位图)都不会被重新绘制?
  • yes BB 向堆栈上最顶层的屏幕发出绘制命令,但在这种情况下被遮挡的像素不是底层屏幕,而是当前最顶层屏幕(透明屏幕)的像素

标签: blackberry


【解决方案1】:

YMMV,但我用这个做了一个透明屏幕:

public class TranslucentScreen extends Screen {
    public TranslucentScreen() {
        super(new VerticalFieldManager(USE_ALL_WIDTH | NO_VERTICAL_SCROLL));
        setBackground(BackgroundFactory.createSolidTransparentBackground(0x000000, 150));
    }
    protected void sublayout(int width, int height) {
        setPosition(0, 0);
        setExtent(width, height);

        setPositionDelegate(0, 0);
        layoutDelegate(width, height);
    }
}

这是用于我制作的具有半透明黑色背景的基本弹出屏幕屏幕。我在屏幕上添加了一个 VerticalFieldManager,我控制了背景绘画,所以这将是我想要的,然后将我的其他字段添加到其中。

【讨论】:

  • 真棒.. 似乎对我有用。很抱歉我无法投票给你,因为我没有最低限度的声誉:P
  • 别担心,很高兴能帮上忙!
猜你喜欢
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-21
  • 1970-01-01
相关资源
最近更新 更多