我正在尝试为黑莓开发一个类似地图的小应用程序。我需要知道如何将一个小图像放在另一个更大的图像上。
较大的图像就像一张地图,我需要使用较小的图像来指向地图上的特定位置。因此较小的图像应覆盖在较大的图像上方。同时,我需要移动地图,较小的图像应该跟随地图上的那个位置。
有没有人知道这个问题是否有特定的API?
答案 0 :(得分:1)
示例将图标位图定位在地图位图的中心位置:
class Scr extends MainScreen {
Bitmap mMapBitmap = Bitmap.getBitmapResource("map.png");
Bitmap mIconBitmap = Bitmap.getBitmapResource("icon.png");
Bitmap getOverlappedBitmap(Bitmap map, Bitmap icon) {
Graphics g = new Graphics(map);
int width = icon.getWidth();
int height = icon.getHeight();
int x = (map.getWidth() - width) / 2;
int y = (map.getHeight() - height) / 2;
g.drawBitmap(x, y, width, height, icon, 0, 0);
return map;
}
public Scr() {
add(new BitmapField(getOverlappedBitmap(mMapBitmap, mIconBitmap)));
}
}
参见示例
class Scr extends MainScreen {
Bitmap[] images = new Bitmap[0];
int width = Display.getWidth();
int height = Display.getHeight();
Bitmap bitmap = new Bitmap(width, height);
BitmapField bitmapField = new BitmapField(bitmap);
public Scr() {
add(bitmapField);
}
MenuItem mAddBitmap = new MenuItem("Add image", 0, 0) {
public void run() {
Bitmap image = Bitmap.getBitmapResource("img" + (images.length + 1)
+ ".png");
Arrays.add(images, image);
refresh();
}
};
MenuItem mClean = new MenuItem("Clean", 0, 0) {
public void run() {
images = new Bitmap[0];
refresh();
}
};
MenuItem mSave = new MenuItem("Save", 0, 0) {
public void run() {
String mFileName = System.getProperty("fileconn.dir.photos")
+ "test.bmp";
// bitmap to byte array conversion
byte[] bitmapBuffer = new byte[0];
PNGEncoder encoder = new PNGEncoder(bitmap, true);
try {
bitmapBuffer = encoder.encode(true);
} catch (IOException e) {
e.printStackTrace();
}
writeFile(bitmapBuffer, mFileName);
}
};
private void writeFile(byte[] data, String fileName) {
FileConnection fconn = null;
try {
fconn = (FileConnection) Connector.open(fileName,
Connector.READ_WRITE);
} catch (IOException e) {
System.out.print("Error opening file");
}
if (fconn.exists())
try {
fconn.delete();
} catch (IOException e) {
System.out.print("Error deleting file");
}
try {
fconn.create();
} catch (IOException e) {
System.out.print("Error creating file");
}
OutputStream out = null;
try {
out = fconn.openOutputStream();
} catch (IOException e) {
System.out.print("Error opening output stream");
}
try {
out.write(data);
} catch (IOException e) {
System.out.print("Error writing to output stream");
}
try {
fconn.close();
} catch (IOException e) {
System.out.print("Error closing file");
}
}
void refresh() {
bitmap = new Bitmap(width, height);
Graphics g = new Graphics(bitmap);
for (int i = 0; i < images.length; i++) {
g.setGlobalAlpha(100);
g.drawBitmap(0, 0, width, height, images[i], 0, 0);
}
bitmapField.setBitmap(bitmap);
}
protected void makeMenu(Menu menu, int instance) {
super.makeMenu(menu, instance);
menu.add(mAddBitmap);
menu.add(mSave);
menu.add(mClean);
}
}
答案 1 :(得分:0)
在Blackberry(以及其他基于java的移动设备)上,您可以根据需要堆叠尽可能多的位图。
请确保您在第一个位图上绘制的位图包含透明像素,以便查看位和不规则形状。
最好的方法是使用png8,其中一种颜色设置为完全透明。
现代手机越多,现在就可以使用alpha值,可以用于半透明效果。若要尝试Blackberry也支持此功能,请将png32图像用于第二个位图,并确保某些像素具有半透明alpha值(例如128)。
答案 2 :(得分:0)
对于透明度,请检查此图形类&gt; setGlobalAlpha方法。您可以根据所需的透明度将其值设置为0-100。
http://www.blackberry.com/developers/docs/4.0.2api/net/rim/device/api/ui/Graphics.html http://www.blackberry.com/developers/docs/4.0.2api/net/rim/device/api/ui/Graphics.html#setGlobalAlpha%28int%29