代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
菜单滑动效果的实现
作者:
OGEngine
/ 发布于
2014/8/4
/
765
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<TextureRegion> columns = new ArrayList<TextureRegion>(); // =========================================================== // 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; } }); } } }
试试其它关键字
菜单滑动效果
菜单滑动
滑动菜单
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
OGEngine
贡献的其它代码
(
1
)
.
菜单滑动效果的实现
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3