AndEngine----自定义带文字的ButtonSprite

上一篇,学习了AndEngine中的ButtonSprite的用法,说要实现带文字的 ButtonSprite,直接贴代码了:

public class TextButtonSprite extends Rectangle {
	private final static String TAG = "TextButtonSprite";

	// 显示文字
	private final Text mText;

	ButtonSprite mButtonSprite;

	public TextButtonSprite(float pX, float pY,
			TiledTextureRegion pTiledTextureRegion, Font pFont, String pText,
			VertexBufferObjectManager pVertexBufferObjectManager) {
		super(pX, pY, pTiledTextureRegion.getWidth(), pTiledTextureRegion
				.getHeight(), pVertexBufferObjectManager);
		mButtonSprite = new ButtonSprite(0, 0, pTiledTextureRegion,
				pVertexBufferObjectManager);
		mText = new Text(0, 0, pFont, pText, pVertexBufferObjectManager);
		float buttonTextureRegionWidth = pTiledTextureRegion.getWidth();
		float buttonTextureRegionHeight = pTiledTextureRegion.getHeight();
		float textWidth = mText.getWidth();
		float textHeight = mText.getHeight();
		// 文字长度大于按钮的长度的时候,对按钮进行缩放,从而适配文字
		if (textWidth > buttonTextureRegionWidth
				|| textHeight > buttonTextureRegionHeight) {
			float widthScale = textWidth / buttonTextureRegionWidth;
			float heightScale = textHeight / buttonTextureRegionHeight;
			if (widthScale > heightScale) {
				setWidth(buttonTextureRegionWidth * widthScale);
				setHeight(buttonTextureRegionHeight * widthScale);
				// 增加一个偏移量,当然也可以不用加
				mButtonSprite.setScale((widthScale + 0.1f));
			} else {
				setWidth(buttonTextureRegionWidth * heightScale);
				setHeight(buttonTextureRegionHeight * heightScale);
				// 增加一个偏移量,当然也可以不用加
				mButtonSprite.setScale((heightScale + 0.1f));
			}

		}
		if (mChildrenIgnoreUpdate) {

		}
		// 计算一下居中的位置
		float textX = (getWidth() - mText.getWidth()) / 2;
		float textY = (getHeight() - mText.getHeight()) / 2;
		mButtonSprite.setPosition((getWidth() - buttonTextureRegionWidth) / 2,
				(getHeight() - buttonTextureRegionWidth) / 2);
		mText.setPosition(textX, textY);
		attachChild(mButtonSprite);
		attachChild(mText);
	}

	// ===========================================================
	// Constants
	// ===========================================================

	// ===========================================================
	// Fields
	// ===========================================================

	// ===========================================================
	// Constructors
	// ===========================================================

	// ===========================================================
	// Getter & Setter
	// ===========================================================

	// ===========================================================
	// Methods for/from SuperClass/Interfaces
	// ===========================================================
	@Override
	public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
			float pTouchAreaLocalX, float pTouchAreaLocalY) {
		Log.e(TAG, " [onAreaTouched] ");
		return mButtonSprite.onAreaTouched(pSceneTouchEvent, pTouchAreaLocalX,
				pTouchAreaLocalY);
	}

	// ===========================================================
	// Methods
	// ===========================================================

	// ===========================================================
	// Inner and Anonymous Classes
	// ===========================================================
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值