请您帮忙。我在页面下面有一个非常简单的示例,我想要一个2色的背景,对角线分割,这是我已经实现的。由于它位于LayeredLayout上,因此我会将页面内容覆盖在上面。
在模拟器中一切都很好,但是当我将应用程序放到我的android设备上时,然后当我在屏幕的任何部分上按时,左上角的三角形将变为白色,然后在我按下时返回。右下角的三角形保持原样。
因为这是主页的背景,所以我显然不希望这种颜色发生变化。 非常感谢
一个示例项目类在这里:
# respond to switch connection up event
def _handle_ConnectionUp(self, event):
self.connection = event.connection
print("connecting to %s" %(self.connection))
# code to send ARP requests to servers
r = arp()
r.hwtype = r.HW_TYPE_ETHERNET
r.prototype = r.PROTO_TYPE_IP
r.hwlen = 6
r.protolen = r.protolen
r.opcode = r.REQUEST
r.hwdst = ETHER_BROADCAST
r.protodst = IPAddr("10.0.0.8")
r.hwsrc = EthAddr("00:12:34:56:78:90")
r.protosrc = IPAddr("10.1.2.3")
e = ethernet(type=ethernet.ARP_TYPE, src=EthAddr("00:12:34:56:78:90") , dst=ETHER_BROADCAST)
e.set_payload(r)
msg = of.ofp_packet_out()
msg.data = e.pack()
msg.actions.append(of.ofp_action_output(port = of.OFPP_FLOOD))
event.connection.send(msg)
答案 0 :(得分:1)
您正在创建两个不透明的容器,但只绘制其中的一部分。然后,将它们一个放在另一个之上,并依靠您只抽出一些容器这一事实。这适用于某些形式的绘制(从下到上),但是当您单击某个区域时,我们仅绘制更改。在这一点上,我们检查不透明度,以防止再次涂抹“所有东西”的成本。
具体来说,这是问题所在:
currentForm.getToolbar().getAllStyles().setBgTransparency(255);
应该为0
来指示所需的透明度。但是我会完全避免这种分层方法,因为如果您进行绘图,它确实非常昂贵。最好画所有东西。在这种情况下,您只需要一个Painter
容器,就可以使用setBgPainter(Painter)
样式将其应用于任何任意组件的背景。
请注意,setBgTransparency(255)
那时将可以正常工作,并且是正确的选择,因为您身后没有其他物品。
答案 1 :(得分:0)
感谢@Shai Almog。现在,我对容器进行了重新设计以使用Painter类,它可以解决问题。下面的新代码:
public class AndroidKeyboard {
private Form currentForm = new Form("", new BorderLayout());
public void buildPage() {
Container background = getBackground();
currentForm.add(BorderLayout.CENTER, background);
Button button = new Button("Click me");
currentForm.add(BorderLayout.SOUTH, button);
currentForm.show();
}
int topColour = 0x4822A4;
int bottomColour = 0x20AEEA;
private Container getBackground() {
Container cmp = new Container();
Painter p = new Painter() {
@Override
public void paint(Graphics g, Rectangle rect) {
boolean antiAliased = g.isAntiAliased();
g.setAntiAliased(true);
g.setColor(topColour);
int[] int_x = new int[] { 0, currentForm.getWidth(), 0 };
int[] int_y = new int[] { 0, 0, currentForm.getHeight() };
g.fillPolygon(int_x, int_y, 3);
g.setColor(bottomColour);
int[] int_x2 = new int[] { currentForm.getWidth(), currentForm.getWidth(), 0 };
int[] int_y2 = new int[] { 0, currentForm.getHeight(), currentForm.getHeight() };
g.fillPolygon(int_x2, int_y2, 3);
g.setAntiAliased(antiAliased);
}
};
cmp.getAllStyles().setBgPainter(p);
return cmp;
}