Blackberry 6,7 java环境下开发页面之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); 

改成graphics.drawText(_title, x2, y2);

以上是自己开发是遇到的一些问题,自己总结的,若有什么不对的地方 还请大家提出,



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值