上一篇,学习了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
// ===========================================================
}