java实现菜单滑动效果
菜单滑动效果的实现
publicclassMenuScrollerActivityextendsBaseGameActivityimplementsIScrollDetectorListener,IOnSceneTouchListener,IClickDetectorListener{ //=========================================================== //Constants //=========================================================== protectedstaticintCAMERA_WIDTH=480; protectedstaticintCAMERA_HEIGHT=320; protectedstaticintFONT_SIZE=24; protectedstaticintPADDING=50; protectedstaticintMENUITEMS=7; //=========================================================== //Fields //=========================================================== privateScenemScene; privateCameramCamera; privateFontmFont; privateBitmapTextureAtlasmFontTexture; privateBitmapTextureAtlasmMenuTextureAtlas; privateTextureRegionmMenuLeftTextureRegion; privateTextureRegionmMenuRightTextureRegion; privateSpritemenuleft; privateSpritemenuright; //Scrolling privateSurfaceScrollDetectormScrollDetector; privateClickDetectormClickDetector; privatefloatmMinX=0; privatefloatmMaxX=0; privatefloatmCurrentX=0; privateintiItemClicked=-1; privateRectanglescrollBar; privateList<TextureRegion>columns=newArrayList<TextureRegion>(); //=========================================================== //Constructors //=========================================================== //=========================================================== //Getter&Setter //=========================================================== //=========================================================== //Methodsfor/fromSuperClass/Interfaces //=========================================================== @Override publicvoidonLoadResources(){ //Paths FontFactory.setAssetBasePath("font/"); BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/"); //Font this.mFontTexture=newBitmapTextureAtlas(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); //Imagesforthemenu for(inti=0;i<MENUITEMS;i++){ BitmapTextureAtlasmMenuBitmapTextureAtlas=newBitmapTextureAtlas(256,256,TextureOptions.BILINEAR_PREMULTIPLYALPHA); TextureRegionmMenuTextureRegion=BitmapTextureAtlasTextureRegionFactory.createFromAsset(mMenuBitmapTextureAtlas,this,"menu"+i+".png",0,0); this.mEngine.getTextureManager().loadTexture(mMenuBitmapTextureAtlas); columns.add(mMenuTextureRegion); } //Texturesformenuarrows this.mMenuTextureAtlas=newBitmapTextureAtlas(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 publicEngineonLoadEngine(){ this.mCamera=newCamera(0,0,CAMERA_WIDTH,CAMERA_HEIGHT); finalEngineOptionsengineOptions=newEngineOptions(true,ScreenOrientation.LANDSCAPE,newFillResolutionPolicy(),this.mCamera); engineOptions.getTouchOptions().setRunOnUpdateThread(true); finalEngineengine=newEngine(engineOptions); returnengine; } @Override publicSceneonLoadScene(){ this.mEngine.registerUpdateHandler(newFPSLogger()); this.mScene=newScene(); this.mScene.setBackground(newColorBackground(0,0,0)); this.mScrollDetector=newSurfaceScrollDetector(this); this.mClickDetector=newClickDetector(this); this.mScene.setOnSceneTouchListener(this); this.mScene.setTouchAreaBindingEnabled(true); this.mScene.setOnSceneTouchListenerBindingEnabled(true); CreateMenuBoxes(); returnthis.mScene; } @Override publicbooleanonSceneTouchEvent(finalScenepScene,finalTouchEventpSceneTouchEvent){ this.mClickDetector.onTouchEvent(pSceneTouchEvent); this.mScrollDetector.onTouchEvent(pSceneTouchEvent); returntrue; } @Override publicvoidonScroll(finalScrollDetectorpScollDetector,finalTouchEventpTouchEvent,finalfloatpDistanceX,finalfloatpDistanceY){ //Disablethemenuarrowsleftandright(15pxpadding) if(mCamera.getMinX()<=15) menuleft.setVisible(false); else menuleft.setVisible(true); if(mCamera.getMinX()>mMaxX-15) menuright.setVisible(false); else menuright.setVisible(true); //Returnifendsarereached if(((mCurrentX-pDistanceX)<mMinX)){ return; }elseif((mCurrentX-pDistanceX)>mMaxX){ return; } //Centercameratothecurrentpoint this.mCamera.offsetCenter(-pDistanceX,0); mCurrentX-=pDistanceX; //Setthescrollbarwiththecamera floattempX=mCamera.getCenterX()-CAMERA_WIDTH/2; //addthe%parttotheposition tempX+=(tempX/(mMaxX+CAMERA_WIDTH))*CAMERA_WIDTH; //settheposition scrollBar.setPosition(tempX,scrollBar.getY()); //setthearrowsforleftandright menuright.setPosition(mCamera.getCenterX()+CAMERA_WIDTH/2-menuright.getWidth(),menuright.getY()); menuleft.setPosition(mCamera.getCenterX()-CAMERA_WIDTH/2,menuleft.getY()); //BecauseCameracanhavenegativXvalues,sosetto0 if(this.mCamera.getMinX()<0){ this.mCamera.offsetCenter(0,0); mCurrentX=0; } } @Override publicvoidonClick(ClickDetectorpClickDetector,TouchEventpTouchEvent){ loadLevel(iItemClicked); }; //=========================================================== //Methods //=========================================================== privatevoidCreateMenuBoxes(){ intspriteX=PADDING; intspriteY=PADDING; //currentitemcounter intiItem=1; for(intx=0;x<columns.size();x++){ //OnTouch,savetheclickeditemincaseit'saclickandnotascroll. finalintitemToLoad=iItem; Spritesprite=newSprite(spriteX,spriteY,columns.get(x)){ publicbooleanonAreaTouched(finalTouchEventpSceneTouchEvent,finalfloatpTouchAreaLocalX,finalfloatpTouchAreaLocalY){ iItemClicked=itemToLoad; returnfalse; } }; iItem++; this.mScene.attachChild(sprite); this.mScene.registerTouchArea(sprite); spriteX+=20+PADDING+sprite.getWidth(); } mMaxX=spriteX-CAMERA_WIDTH; //setthesizeofthescrollbar floatscrollbarsize=CAMERA_WIDTH/((mMaxX+CAMERA_WIDTH)/CAMERA_WIDTH); scrollBar=newRectangle(0,CAMERA_HEIGHT-20,scrollbarsize,20); scrollBar.setColor(1,0,0); this.mScene.attachChild(scrollBar); menuleft=newSprite(0,CAMERA_HEIGHT/2-mMenuLeftTextureRegion.getHeight()/2,mMenuLeftTextureRegion); menuright=newSprite(CAMERA_WIDTH-mMenuRightTextureRegion.getWidth(),CAMERA_HEIGHT/2-mMenuRightTextureRegion.getHeight()/2,mMenuRightTextureRegion); this.mScene.attachChild(menuright); menuleft.setVisible(false); this.mScene.attachChild(menuleft); } @Override publicvoidonLoadComplete(){ } //Hereiswhereyoucalltheitemload. privatevoidloadLevel(finalintiLevel){ if(iLevel!=-1){ runOnUiThread(newRunnable(){ @Override publicvoidrun(){ Toast.makeText(MenuScrollerActivity.this,"LoadItem"+String.valueOf(iLevel),Toast.LENGTH_SHORT).show(); iItemClicked=-1; } }); } } }
以上所述就是本文的全部内容了,希望大家能够喜欢。