java滑动_java实现菜单滑动效果

public class MenuScrollerActivity extends BaseGameActivity implements IScrollDetectorListener, IOnSceneTouchListener, IClickDetectorListener {

// ===========================================================

// Constants

// ===========================================================

protected static int CAMERA_WIDTH = 480;

protected static int CAMERA_HEIGHT = 320;

protected static int FONT_SIZE = 24;

protected static int PADDING = 50;

protected static int MENUITEMS = 7;

// ===========================================================

// Fields

// ===========================================================

private Scene mScene;

private Camera mCamera;

private Font mFont;

private BitmapTextureAtlas mFontTexture;

private BitmapTextureAtlas mMenuTextureAtlas;

private TextureRegion mMenuLeftTextureRegion;

private TextureRegion mMenuRightTextureRegion;

private Sprite menuleft;

private Sprite menuright;

// Scrolling

private SurfaceScrollDetector mScrollDetector;

private ClickDetector mClickDetector;

private float mMinX = 0;

private float mMaxX = 0;

private float mCurrentX = 0;

private int iItemClicked = -1;

private Rectangle scrollBar;

private List columns = new ArrayList();

// ===========================================================

// Constructors

// ===========================================================

// ===========================================================

// Getter & Setter

// ===========================================================

// ===========================================================

// Methods for/from SuperClass/Interfaces

// ===========================================================

@Override

public void onLoadResources() {

// Paths

FontFactory.setAssetBasePath("font/");

BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");

// Font

this.mFontTexture = new BitmapTextureAtlas(256, 256);

this.mFont = FontFactory.createFromAsset(this.mFontTexture, this, "Plok.TTF", FONT_SIZE, true, Color.BLACK);

this.mEngine.getTextureManager().loadTextures(this.mFontTexture);

this.mEngine.getFontManager().loadFonts(this.mFont);

//Images for the menu

for (int i = 0; i < MENUITEMS; i++) {

BitmapTextureAtlas mMenuBitmapTextureAtlas = new BitmapTextureAtlas(256,256, TextureOptions.BILINEAR_PREMULTIPLYALPHA);

TextureRegion mMenuTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(mMenuBitmapTextureAtlas, this, "menu"+i+".png", 0, 0);

this.mEngine.getTextureManager().loadTexture(mMenuBitmapTextureAtlas);

columns.add(mMenuTextureRegion);

}

//Textures for menu arrows

this.mMenuTextureAtlas = new BitmapTextureAtlas(128,128, TextureOptions.BILINEAR_PREMULTIPLYALPHA);

this.mMenuLeftTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(mMenuTextureAtlas, this, "menu_left.png", 0, 0);

this.mMenuRightTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(mMenuTextureAtlas, this, "menu_right.png",64, 0);

this.mEngine.getTextureManager().loadTexture(mMenuTextureAtlas);

}

@Override

public Engine onLoadEngine() {

this.mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);

final EngineOptions engineOptions = new EngineOptions(true, ScreenOrientation.LANDSCAPE, new FillResolutionPolicy(), this.mCamera);

engineOptions.getTouchOptions().setRunOnUpdateThread(true);

final Engine engine = new Engine(engineOptions);

return engine;

}

@Override

public Scene onLoadScene() {

this.mEngine.registerUpdateHandler(new FPSLogger());

this.mScene = new Scene();

this.mScene.setBackground(new ColorBackground(0, 0, 0));

this.mScrollDetector = new SurfaceScrollDetector(this);

this.mClickDetector = new ClickDetector(this);

this.mScene.setOnSceneTouchListener(this);

this.mScene.setTouchAreaBindingEnabled(true);

this.mScene.setOnSceneTouchListenerBindingEnabled(true);

CreateMenuBoxes();

return this.mScene;

}

@Override

public boolean onSceneTouchEvent(final Scene pScene, final TouchEvent pSceneTouchEvent) {

this.mClickDetector.onTouchEvent(pSceneTouchEvent);

this.mScrollDetector.onTouchEvent(pSceneTouchEvent);

return true;

}

@Override

public void onScroll(final ScrollDetector pScollDetector, final TouchEvent pTouchEvent, final float pDistanceX, final float pDistanceY) {

//Disable the menu arrows left and right (15px padding)

if(mCamera.getMinX()<=15)

menuleft.setVisible(false);

else

menuleft.setVisible(true);

if(mCamera.getMinX()>mMaxX-15)

menuright.setVisible(false);

else

menuright.setVisible(true);

//Return if ends are reached

if ( ((mCurrentX - pDistanceX) < mMinX) ){

return;

}else if((mCurrentX - pDistanceX) > mMaxX){

return;

}

//Center camera to the current point

this.mCamera.offsetCenter(-pDistanceX,0 );

mCurrentX -= pDistanceX;

//Set the scrollbar with the camera

float tempX =mCamera.getCenterX()-CAMERA_WIDTH/2;

// add the % part to the position

tempX+= (tempX/(mMaxX+CAMERA_WIDTH))*CAMERA_WIDTH;

//set the position

scrollBar.setPosition(tempX, scrollBar.getY());

//set the arrows for left and right

menuright.setPosition(mCamera.getCenterX()+CAMERA_WIDTH/2-menuright.getWidth(),menuright.getY());

menuleft.setPosition(mCamera.getCenterX()-CAMERA_WIDTH/2,menuleft.getY());

//Because Camera can have negativ X values, so set to 0

if(this.mCamera.getMinX()<0){

this.mCamera.offsetCenter(0,0 );

mCurrentX=0;

}

}

@Override

public void onClick(ClickDetector pClickDetector, TouchEvent pTouchEvent) {

loadLevel(iItemClicked);

};

// ===========================================================

// Methods

// ===========================================================

private void CreateMenuBoxes() {

int spriteX = PADDING;

int spriteY = PADDING;

//current item counter

int iItem = 1;

for (int x = 0; x < columns.size(); x++) {

//On Touch, save the clicked item in case it's a click and not a scroll.

final int itemToLoad = iItem;

Sprite sprite = new Sprite(spriteX,spriteY,columns.get(x)){

public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final float pTouchAreaLocalX, final float pTouchAreaLocalY) {

iItemClicked = itemToLoad;

return false;

}

};

iItem++;

this.mScene.attachChild(sprite);

this.mScene.registerTouchArea(sprite);

spriteX += 20 + PADDING+sprite.getWidth();

}

mMaxX = spriteX - CAMERA_WIDTH;

//set the size of the scrollbar

float scrollbarsize = CAMERA_WIDTH/((mMaxX+CAMERA_WIDTH)/CAMERA_WIDTH);

scrollBar = new Rectangle(0,CAMERA_HEIGHT-20,scrollbarsize, 20);

scrollBar.setColor(1,0,0);

this.mScene.attachChild(scrollBar);

menuleft = new Sprite(0,CAMERA_HEIGHT/2-mMenuLeftTextureRegion.getHeight()/2,mMenuLeftTextureRegion);

menuright = new Sprite(CAMERA_WIDTH-mMenuRightTextureRegion.getWidth(),CAMERA_HEIGHT/2-mMenuRightTextureRegion.getHeight()/2,mMenuRightTextureRegion);

this.mScene.attachChild(menuright);

menuleft.setVisible(false);

this.mScene.attachChild(menuleft);

}

@Override

public void onLoadComplete() {

}

//Here is where you call the item load.

private void loadLevel(final int iLevel) {

if (iLevel != -1) {

runOnUiThread(new Runnable() {

@Override

public void run() {

Toast.makeText(MenuScrollerActivity.this, "Load Item" + String.valueOf(iLevel), Toast.LENGTH_SHORT).show();

iItemClicked = -1;

}

});

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值