经过一年的黑莓开发,总结一些东西,记录遇到过的一些问题。
这里主要记录跟页面排版有关的问题:
图片的组合,有时我们需要把两个图片组合到一起,如文字与背景图片组成一个图片按钮 或者是 文字图片与背景图片组合而成的图片按钮 ,以及选中按钮时背景图片切换为选中状态。 这些都用到了Field这个类,这个类是BB6,7页面排盘中非常重要的,你可以重写Field来实现你想要的排版.
这里主要记录跟页面排版有关的问题:
图片的组合,有时我们需要把两个图片组合到一起,如文字与背景图片组成一个图片按钮 或者是 文字图片与背景图片组合而成的图片按钮 ,以及选中按钮时背景图片切换为选中状态。 这些都用到了Field这个类,这个类是BB6,7页面排盘中非常重要的,你可以重写Field来实现你想要的排版.
以图片按钮为例:
import net.rim.device.api.system.Bitmap;
import net.rim.device.api.system.Characters;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.Graphics;
/*
* Image combination switch focus
*
* */
public class BitmapButtonField2 extends Field{
private Bitmap _pic;//文字图片
private Bitmap _picback;//背景图片
private Bitmap _picbackselected;//选中时的背景图片
private int _width;//要显示的宽度
private int _height;//要显示的高度
/*
* pic Main Image
* picback Background image
* picbackselected Select the picture you want to switch when
*
* */
public BitmapButtonField2(Bitmap pic,Bitmap picback,Bitmap picbackselected
,int width,int height){
this(pic,picback,picbackselected,width,height,0);
}
public BitmapButtonField2(Bitmap pic,Bitmap picback,Bitmap picbackselected,
int width,int height,long style){
super(Field.FOCUSABLE|style);
this._pic=pic;
this._picback=picback;
this._picbackselected=picbackselected;
this._width=width;
this._height=height;
}
protected void layout(int width, int height) {
setExtent(_width, _height);
}
protected void paint(Graphics graphics) {
if(isFocus()&&_picbackselected!=null){//判断当前是否为选中状态
//这里除2 计算横向画此图片时的起始位置 以保证图片居中显示
int x1=(_width-_picbackselected.getWidth())/2;
//这里除2 计算纵向画此图片时的起始位置 以保证图片居中显示
int y1=(_height-_picbackselected.getHeight())/2;
//首先画的是选中时背景图片
graphics.drawBitmap(x1, y1, _picbackselected.getWidth(),
_picbackselected.getHeight(), _picbackselected, 0, 0);
int x2=(_width-_pic.getWidth())/2;
int y2=(_height-_pic.getHeight())/2;
//在背景图片上画文字图片
graphics.drawBitmap(x2, y2, _pic.getWidth(),
_pic.getHeight(), _pic, 0, 0);
}else {//When not selected
int x1=(_width-_picback.getWidth())/2;
int y1=(_height-_picback.getHeight())/2;
//首先画的是未选中时背景图片
graphics.drawBitmap(x1, y1, _picback.getWidth(),
_picback.getHeight(), _picback, 0, 0);
int x2=(_width-_pic.getWidth())/2;
int y2=(_height-_pic.getHeight())/2;
//在背景图片上画文字图片
graphics.drawBitmap(x2, y2, _pic.getWidth(),
_pic.getHeight(), _pic, 0, 0);
}
}
protected boolean keyChar(char character, int status, int time) {
if(character == Characters.ENTER){
clickButton();
return true;
}
return super.keyChar(character, status, time);
}
protected boolean navigationClick(int status, int time) {
clickButton();
return true;
}
protected boolean trackwheelClick(int status, int time) {
clickButton();
return true;
}
protected boolean invokeAction(int action) {
switch (action){
case ACTION_INVOKE:{
clickButton();
return true;
}
}
return super.invokeAction(action);
}
public void clickButton(){
fieldChangeNotify(0);
}
}
文字与图片组合可以将上面的
graphics.drawBitmap(x2, y2, _pic.getWidth(), _pic.getHeight(), _pic, 0, 0);
以上是自己开发是遇到的一些问题,自己总结的,若有什么不对的地方 还请大家提出,