2011-04-21 61 views
0

我想让背景图像拉伸所有屏幕。我只是创建了一个VerticalFieldManager并修改了绘制方法。将位图绘制为MainScreen背景。如何拉伸图像?

verticalFieldManager = new VerticalFieldManager(VerticalFieldManager.USE_ALL_WIDTH 
          | VerticalFieldManager.NO_HORIZONTAL_SCROLLBAR) { 
      public void paint(Graphics graphics) { 
        graphics.drawBitmap(0, 0, this.getWidth(), this.getHeight(), 
             backgroundBitmap, 0, 0); 
        super.paint(graphics); 
     } 

    }; 

而当我添加一个ListField到verticalFieldManager和滚动,背景图像不重画。滚动时如何重绘背景?

回答

2

从您的Bitmap创建EncodedImage,或者甚至直接从资源中提取EncodedImage -​​。

然后用它来扩展它:

public static EncodedImage resize(EncodedImage eImage, int toWidth, 
     int toHeight, boolean keepAspectRatio) { 

    int scaleX = Fixed32.div(
     Fixed32.toFP(eImage.getWidth()), 
     Fixed32.toFP(toWidth) 
    ); 

    int scaleY = Fixed32.div(
     Fixed32.toFP(eImage.getHeight()), 
     Fixed32.toFP(toHeight) 
    ); 

    if (keepAspectRatio) { 
     int scale = (scaleX > scaleY) ? scaleX : scaleY; 
     return eImage.scaleImage32(scale, scale); 
    } else { 
     return eImage.scaleImage32(scaleX, scaleY); 
    } 
} 

那么您可Graphics对象上绘制EncodedImage

graphics.drawImage(
    0, 0, 
    encodedImage.getScaledWidth(), ncodedImage.getScaledHeight(), 
    encodedImage, 0, 0, 0 
); 
+0

好极了,它的工作原理。非常感谢你阿哈迈德。 你能帮我解决ListField滚动问题吗?当我滚动时,背景图像也滚动。滚动事件发生时应该重绘背景图像吗? – redline 2011-04-21 11:31:23

+0

哦,不,当我使用这个代码时,在listview的最后一项之后总是有一个空格。这是不好的。 – redline 2011-04-21 11:56:05

+0

为了帮助解决滚动问题,我需要试验一下代码。对不起,现在实验是不可能的 - 我也面临时间压力。然而,您尝试的想法是将BG绘图的开始Y坐标转换为与当前Ysroll相同的像素数(使用容器的'Manager.getVerticalScroll()')。 – 2011-04-21 11:58:32