栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java实现菜单滑动效果

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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;
  }
     });
 }
    }
}

以上所述就是本文的全部内容了,希望大家能够喜欢。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/151694.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号