BB アプリ用のカスタム ListField を作成したいと考えています。私はそれで成功しました。2 つの RichTextField、1 つの Image、1 つの RatingField を listField に描画します。
問題は、LIstField に RichTextField の単一行を表示したいだけです。したがって、複数の行がある場合は、1 行だけを表示する必要があります。
複数の行がある場合、rattingField がオーバーラップするという理由だけでそれが必要です。
下の画像を参照してください。
以下のコードを使用して作成し、値を設定しています。
rows = new TableRowManager[dealArray.length()];
rating2 = new RatingField( Bitmap.getBitmapResource( "yellow_star.png" )
, Bitmap.getBitmapResource( "white_star.png" )
, Bitmap.getBitmapResource( "yellow_star.png" )
, Bitmap.getBitmapResource( "white_star.png" )
, 8, 5, Field.FIELD_HCENTER );
try{
System.out.println("================== = = ==HERE IT IS COMES");
for(int i=0;i<dealArray.length();i++){
// create a table row manager
rows[i] = new TableRowManager();
// set the menu item name
EncodedImage encoded_img=EncodedImage.getEncodedImageResource("no_photo.png");
byte[] data=encoded_img.getData();
Bitmap bitmap=Bitmap.createBitmapFromBytes(data, 0, data.length,1);//Here we get the Image;
Bitmap scaleBitmap=new Bitmap(100,100);//Now we are scaling that image;
bitmap.scaleInto(scaleBitmap, Bitmap.FILTER_LANCZOS);
rows[i].add(new BitmapField(scaleBitmap));
rows[i].add(new RichTextField(dealArray.getJSONObject(i).getString("DealName"), DrawStyle.ELLIPSIS));
rows[i].add(new RichTextField(dealArray.getJSONObject(i).getString("DealDescription"), TextField.NO_NEWLINE));
rows[i].add(new RatingField( Bitmap.getBitmapResource( "yellow_star.png" )
, Bitmap.getBitmapResource( "white_star.png" )
, Bitmap.getBitmapResource( "yellow_star.png" )
, Bitmap.getBitmapResource( "white_star.png" )
, Integer.parseInt(dealArray.getJSONObject(i).getString("DealTotalStamp"))
, Integer.parseInt(dealArray.getJSONObject(i).getString("StampCompletionOnDeal"))
, Field.FIELD_HCENTER ));
// create a table row manager
}
}catch(Exception e){
e.printStackTrace();
}
System.out.println("HELLOOOOoo oo ooo");
vfm.addAll(rows);
そして、drawListRow で描画するには、以下のコードを使用します。
private class TableRowManager extends Manager{
public TableRowManager(){
super(0);
}
public void drawRow(Graphics g, int x, int y, int width, int height){
// Arrange the cell fields within this row manager.
layout(width, height);
// Place this row manager within its enclosing list.
setPosition(x, y);
// Apply a translating/clipping transformation to the graphics
// context so that this row paints in the right area.
//g.pushRegion(getExtent());
// Paint this manager's controlled fields.
subpaint(g);
g.setColor(0x00000000);
// g.drawLine(0, 0, getPreferredWidth(), 0);
// Restore the graphics context.
g.popContext();
}
protected void sublayout(int width, int height) {
// TODO Auto-generated method stub
int preferredWidth = getPreferredWidth();
int preferredHeight = getPreferredHeight();
// for deal image
//SBitmapField bmp = new BitmapField(Bitmap.getBitmapResource(""));
Field field = getField(0);
layoutChild(field, 100, 100);
setPositionChild(field, 5, 5);
// for deal name
field = getField(1);
layoutChild(field, preferredWidth - 100, 0);
setPositionChild(field, 110, 0);
// for deal Description
field = getField(2);
layoutChild(field, preferredWidth, 5);
setPositionChild(field,110 , 35);
// for Deal stamp
field = getField(3);
layoutChild(field, preferredWidth, 50);
setPositionChild(field, 110, 65);
setExtent(preferredWidth, 110);
}
public int getPreferredWidth()
{
return Graphics.getScreenWidth();
}
// The preferred height of a row is the "row height" as defined in the
// enclosing list.
public int getPreferredHeight()
{
return 30;
}
}
RichTextField の説明を 1 行だけにしたい場合はどうすればよいですか??
これを手伝ってください。