Je vais avoir une anomalie intéressante lors de l'affichage d'un ListField sur le simulateur BlackBerry:Blackberry - mise en page ListField question
L'élément supérieur est la hauteur d'une seule ligne de texte (environ 12 pixels) tandis que le reste sont très bien . Est-ce que quelqu'un sait pourquoi seul le premier article est dessiné de cette façon? De plus, lorsque j'ajoute un lieu vide en position 0, il affiche toujours le premier lieu réel de cette manière (élément en position 1).
Vous ne savez pas quoi faire. Merci pour toute aide.
La mise en page ressemble à ceci:
-----------------------------------
| *part of image* | title |
-----------------------------------
| | title |
| * full image * | address |
| | city, zip |
-----------------------------------
L'objet est appelé comme ceci:
listField = new ListField(venueList.size());
listField.setCallback(this);
listField.setSelectedIndex(-1);
_middle.add(listField);
Voici le code drawListRow:
public void drawListRow(ListField listField, Graphics graphics,
int index, int y, int width)
{
listField.setRowHeight(90);
Hashtable item = (Hashtable) venueList.elementAt(index);
String venue_name = (String) item.get("name");
String image_url = (String) item.get("image_url");
String address = (String) item.get("address");
String city = (String) item.get("city");
String zip = (String) item.get("zip");
EncodedImage img = null;
try
{
String filename = image_url.substring(image_url.indexOf("crop/")
+ 5, image_url.length());
FileConnection fconn = (FileConnection)Connector.open(
"file:///SDCard/Blackberry/project1/" + filename,
Connector.READ);
if (!fconn.exists())
{
}
else
{
InputStream input = fconn.openInputStream();
byte[] data = new byte[(int)fconn.fileSize()];
input.read(data);
input.close();
if(data.length > 0)
{
EncodedImage rawimg = EncodedImage.createEncodedImage(
data, 0, data.length);
int dw = Fixed32.toFP(Display.getWidth());
int iw = Fixed32.toFP(rawimg.getWidth());
int sf = Fixed32.div(iw, dw);
img = rawimg.scaleImage32(sf * 4, sf * 4);
}
else
{
}
}
}
catch(IOException ef)
{
}
graphics.drawText(venue_name, 140, y, 0, width);
graphics.drawText(address, 140, y + 15, 0, width);
graphics.drawText(city + ", " + zip, 140, y + 30, 0, width);
if(img != null)
{
graphics.drawImage(0, y, img.getWidth(), img.getHeight(),
img, 0, 0, 0);
}
}
par la manière, le traitement d'image a été jeté ici pour montrer ce que je fais pour les images. Il est en fait construit ailleurs comme un vecteur d'images codées et appelé par elementAt (index). Lorsqu'il est au bon endroit, il affiche toujours bizarrement. – Kai
Salut! Quel appareil/système d'exploitation utilisez-vous? D'ailleurs, setRowHeight devrait être appelé une fois après la construction de listfield, pas à l'intérieur de drawListRow à chaque fois que la ligne est repeinte. –
gras 9000 sur 4,7 merci pour le conseil. – Kai