在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Android平台开发 → 安卓 EyeRoom 完整源码下载

安卓 EyeRoom 完整源码下载

Android平台开发

下载此实例
  • 开发语言:Java
  • 实例大小:24.81M
  • 下载次数:13
  • 浏览次数:583
  • 发布时间:2014-10-10
  • 实例类别:Android平台开发
  • 发 布 人:crazycode
  • 文件格式:.zip
  • 所需积分:2
 相关标签: Android

实例介绍

【实例简介】
【实例截图】

【核心代码】


package com.android.graphic.iroom;

import java.util.List;

import com.android.graphic.iroom.R;
import gocom.android.GoStyle.GOSTYLE;
import gocom.android.GoStyle.Group;
import gocom.android.GoStyle.Mesh;
import gocom.android.GoStyle.OpenGLRenderer;
import gocom.android.GoStyle.SimplePlane;
import android.content.ActivityNotFoundException;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.content.res.Resources;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Typeface;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.net.Uri;
import android.opengl.GLSurfaceView;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.text.StaticLayout;
import android.text.TextPaint;
import android.text.Layout.Alignment;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Display;
import android.view.MotionEvent;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.VelocityTracker;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.WindowManager;
import android.widget.Toast;

public class IroomMenuAppListView extends GLSurfaceView{
	private static final String TAG = "IroomAppView";
	public final int PageNUM = 10;// 最大支持十页
	public int PAGE_LINE_NUM = 4;// 行
	public int PAGE_ROW_NUM = 4;// 列
	public int PAGE_ITEM_NUM = PAGE_LINE_NUM * PAGE_ROW_NUM;// 每页ITEM的数目
	public final int CHILDNUM = 17;// 每页算法需要的元素的数目,包含背景等
	public final int SPREADFRAME = 10;// 展开的帧数
	public final int ICON_SIZE = 72;
	public final int BITMAP_SIZE = 128;
	public final int TEXT_HEIGHT = 56;
	public final int TEXT_START = 8;
	private final float START_TOUCH_MOVE_PIX = 5;
	private static final int SNAP_VELOCITY = 200;
	private final int WHOLEPASSFRAME = 20;
	private final int GO_MENU_STYLE_MAX_NUM = 15;
	private final int VIEW_UP_MAGIN = 30;
	private final int VIEW_LEFT_MAGIN = -8;
	private final int VIEW_BOTTOM_MAGIN = 30;
	private int BOTTOM_BAR_HEIGHT;//
	public Group[] muPages = null;
	public SimplePlane[][] iconcollection;
	public SimplePlane[][] textcollection;
	public boolean isinit = false;
	public int mCurEffect = 0;
	public static final int PANEL_NUM = 4;
	public final SimplePlane panel[] = new SimplePlane[PANEL_NUM];
	public Bitmap panelframe;

	private OpenGLRenderer renderer;
	private IRoomActivity mHome;
	private int mCurscreen = 0;
	private int mViewWidth = 480;
	private int mViewHeight = 762;
	private GOSTYLE mCurStyle = GOSTYLE.GO_CLASSIC;
	private int cFrame = 0;
	private int tFrame = 20;
	private float xFrame = 0;
	private float mXoffset = 0;
	private float mXstart = 0;
	private boolean mIsGoRight = false;
	private boolean mIsMove = false;
	private VelocityTracker mVelocityTracker;
	private int mTouchSlop;
	private int mMaximumVelocity;
	private Thread menuThread;
	private boolean ischangepage = false;
	private boolean isoneframe = true;
	private boolean isinanim = false;
	private float scale;
	
	private List<ResolveInfo> mApps;
	private int mAppTotalNum = -1;
	private Context mContext;
	public IroomMenuAppListView(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
		Log.d(TAG, "construct");
		// We want an 8888 pixel format because that's required for
		// a translucent window.
		// And we want a depth buffer.
		setEGLConfigChooser(8, 8, 8, 8, 16, 0);// 这个要放在set renderer前
		mContext = context;
		
		renderer = new OpenGLRenderer(mContext);
		this.setRenderer(renderer);

		// 按需渲染
		setRenderMode(RENDERMODE_WHEN_DIRTY);
		// setZOrderOnTop(true);

		// 设置透明
		getHolder().setFormat(PixelFormat.TRANSLUCENT);

		BOTTOM_BAR_HEIGHT = (int) (context.getResources()
				.getDimension(R.dimen.button_bar_height));

		final ViewConfiguration configuration = ViewConfiguration
				.get(getContext());
		mTouchSlop = configuration.getScaledTouchSlop();
		Log.d(TAG, "mTouchSlop :"   mTouchSlop);
		mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();
		
		mCurscreen = 0;
	}

	@Override
	public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
		// TODO Auto-generated method stub
		Log.d(TAG, "surfaceChanged"   w);
		super.surfaceChanged(holder, format, w, h);
		mViewWidth = w;
		mViewHeight = h;
		if(mViewWidth>mViewHeight){
			PAGE_LINE_NUM = 3;// 行
			PAGE_ROW_NUM = 5;// 列
			PAGE_ITEM_NUM = PAGE_LINE_NUM * PAGE_ROW_NUM;// 每页ITEM的数目
		}
		else{
			PAGE_LINE_NUM = 4;// 行
			PAGE_ROW_NUM = 4;// 列
			PAGE_ITEM_NUM = PAGE_LINE_NUM * PAGE_ROW_NUM;// 每页ITEM的数目
		}
		
		resetParams();
		
		initRender(mViewWidth,mViewHeight);
		
		startRender(true);
		
	}

	private void resetParams(){
		ischangepage = false;
		isoneframe = true;
		isinanim = false;
		cFrame = 0;
		tFrame = 20;
		xFrame = 0;
		mXoffset = 0;
		mXstart = 0;
		mIsGoRight = false;
		mIsMove = false;
	}
	@Override
	public void surfaceCreated(SurfaceHolder holder) {
		// TODO Auto-generated method stub
		Log.d(TAG, "surfaceCreated");
		super.surfaceCreated(holder);
		
		resetParams();
		if(mHome.mAppNumView != null){
			mHome.mAppNumView.updateScreen(mCurscreen, getAppAllPageNum());
		}
		
	}

	@Override
	public void surfaceDestroyed(SurfaceHolder holder) {
		// TODO Auto-generated method stub
		Log.d(TAG, "surfaceDestroyed");
		super.surfaceDestroyed(holder);
	}
	
	@Override
	protected void onVisibilityChanged(View changedView, int visibility) {
		// TODO Auto-generated method stub
		super.onVisibilityChanged(changedView, visibility);
		if(changedView == this){
			if(mHome.mAppNumView != null){
				if(visibility == View.VISIBLE){
					mHome.mAppNumView.setVisibility(View.VISIBLE);
				}else
				{
					mHome.mAppNumView.setVisibility(View.GONE);
				}
			}

		}

	}

	@Override
	public boolean onTouchEvent(MotionEvent ev) {
		// TODO Auto-generated method stub
		final int action = ev.getAction();
		float x, y;
		Log.d(TAG, "onTouchEvent action :"   action);

		if (mVelocityTracker == null) {
			mVelocityTracker = VelocityTracker.obtain();
		}
		mVelocityTracker.addMovement(ev);
		
		switch (action & MotionEvent.ACTION_MASK) {
		case MotionEvent.ACTION_DOWN:
			x = ev.getX();
			y = ev.getY();
			if(!isinanim)
			{
				mcurX = mXstart = x;
				istpdown = true;
				isSpreadAnim = -1;
			}
			
			break;
		case MotionEvent.ACTION_MOVE:
			
			x = ev.getX();
			y = ev.getY();
			
			if ((Math.abs(x - mXstart) > START_TOUCH_MOVE_PIX&&istpdown == true)|| mIsMove) {
				mcurX = x;
				mIsMove = true;
				mIsGoRight = (x - mXstart) > 0 ? false : true;
				mXoffset = Math.abs(x - mXstart);
				startRender(false);
			}
			
			break;
		case MotionEvent.ACTION_UP:
			x = ev.getX();
			y = ev.getY();
			if(istpdown){
				
			istpdown = false;
			
			if (mIsMove) {
				final VelocityTracker velocityTracker = mVelocityTracker;
				velocityTracker.computeCurrentVelocity(1000, mMaximumVelocity);
				final int velocityX = (int) velocityTracker.getXVelocity();

				mXoffset = Math.abs(x - mXstart);
				upVecX = velocityX;
				mcurX = x;
				cFrame = 0;
				if (mXoffset > mViewWidth / 2
						|| Math.abs(velocityX) > SNAP_VELOCITY) {
					tFrame = (int) (WHOLEPASSFRAME * (1 - (mXoffset / mViewWidth)));

					if (tFrame == 0) {
						tFrame = 1;
					}
					ischangepage = true;
					InitSlideInfo();
					
				} else {
					ischangepage = false;
					tFrame = 10;//(int)(WHOLEPASSFRAME *((Math.abs(mcurX-mstartX)/mViewWidth)));
				}
				startMenuAppRunnable();
				mIsMove = false;
			} else {
				int position = getTpSelectItemPosition(x, y);
				startSelectItem(position);
			}

			if (mVelocityTracker != null) {
				mVelocityTracker.recycle();
				mVelocityTracker = null;
			}
			break;

		}
		}
		return true;
	}

	private int upVecX = 0;
	private float oneX = 0;
	private float mcurX = 0;
	private int isSpreadAnim = -1;//-1代表正常状态,0代表收缩,1代表动画稳定态,2代表展开
	private boolean istpdown = false;
	
	private void InitSlideInfo() {
		
		Log.d(TAG, "upVecX :"   upVecX);
		// mslideInfo.cosWdata =upVecX/MAXVECX;
		mslideInfo.cosWdata = upVecX / mMaximumVelocity;
		mslideInfo.sinWdata = (float) Math.sin(-Math.acos(mslideInfo.cosWdata));
		if (1 != mslideInfo.sinWdata) {
			mslideInfo.a = ((Math.abs(mcurX - mXstart)) - mViewWidth)
					/ (mslideInfo.sinWdata - 1);
		}
		mslideInfo.b = mViewWidth - mslideInfo.a;
		mslideInfo.w = mMaximumVelocity / mslideInfo.a;
		mslideInfo.xPlusdx = (float) -Math.acos((mslideInfo.cosWdata));


	}

	private float loop_fuction_veccontinue() {
		float d_angle = 0;
		d_angle = (float) (Math.PI / 2 - mslideInfo.xPlusdx);
		oneX = (float) (mslideInfo.a
				* Math.sin(mslideInfo.xPlusdx   d_angle * cFrame / tFrame)   mslideInfo.b);
		return oneX;
	}

	private float loop_fuction() {
		oneX = (float) ((mcurX - mXstart) * Math
				.sin((double) (Math.PI / 2   Math.PI / 2 * cFrame / tFrame)));
		Log.d(TAG, "cFrame :"   cFrame);
		Log.d(TAG, "tFrame :"   tFrame);
		Log.d(TAG, "oneX :"   oneX);
		return Math.abs(oneX);
	}

	private slideifo mslideInfo = new slideifo();

	private class slideifo {
		public float a;
		public float w;
		public float b;
		public float sinWdata;
		public float cosWdata;
		public float xPlusdx;

		public slideifo() {

		}
	}
    private void computeScrollEX()
    {
    	Log.d(TAG,"cFrame:"   cFrame);
    	Log.d(TAG,"tFrame:"   tFrame);
    	Log.d(TAG,"istpdown:"   istpdown);
    	Log.d(TAG,"ischangepage:"   ischangepage);
    	
    	if(!istpdown)
    	{
    		if(isSpreadAnim == -1)
    		{
    			mXoffset = 0;
    		}
    		else if(isSpreadAnim == 1||isSpreadAnim == 0)
    		{
    			if(cFrame == tFrame)
    			{
    				return;
    			}
    			
    			cFrame  ;
    			if(ischangepage)
    			{
    				mXoffset = loop_fuction_veccontinue();
    				if(mXoffset>=mViewWidth||cFrame == tFrame)
    				{
    					mXoffset = mViewWidth;
    					mcurX = mViewWidth;
    				}
    			}
    			else
    			{
    				mXoffset = loop_fuction();
    				if(mXoffset <= 0||cFrame == tFrame)
    				{
    					mXoffset = 0;
    					mcurX = 0;
    				}
    			}
    		}

    	}
    }
    
    public void sendMsgToUpdateNumView(){
    	int what = 0;
    	mHandler.sendEmptyMessage(what);
    }
    
	private void setCurScreen(int index) {
		if (index > 0) {
			mCurscreen = index % getAppAllPageNum();
		} else {
			mCurscreen = (getAppAllPageNum() - Math.abs(index))
					% getAppAllPageNum();
		}
		sendMsgToUpdateNumView();
	}

	public int getTpSelectItemPosition(float x, float y) {
		int position = 0;
		int curScreenPosition = 0;
		int gridW = mViewWidth / PAGE_ROW_NUM;
		int gridH = (mViewHeight - BOTTOM_BAR_HEIGHT - VIEW_UP_MAGIN - VIEW_BOTTOM_MAGIN) / PAGE_LINE_NUM;
		Log.d(TAG, "getTpSelectItemPosition x = "   x   "y= :"   y);
		curScreenPosition = ((int) (y - VIEW_UP_MAGIN)/ gridH) * PAGE_ROW_NUM   (int) x / gridW;
		
		Log.d(TAG, "getTpSelectItemPosition  curScreenPosition "   curScreenPosition);
		if(curScreenPosition<0||curScreenPosition>=PAGE_ITEM_NUM){
			return -1;
		}
		
		position = curScreenPosition   mCurscreen * PAGE_ITEM_NUM;
		
		return position;
	}
	
	void startActivitySafely(Intent intent) {
		
		intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		
		try {
			mHome.StartActivityWithAnimation(intent);
		} catch (ActivityNotFoundException e) {
			Toast.makeText(mHome, "activity not found",
					Toast.LENGTH_SHORT).show();
			Log.e(TAG, "Unable to launch   "   " intent="   intent, e);
		} catch (SecurityException e) {
			Toast.makeText(mHome, "activity not found",
					Toast.LENGTH_SHORT).show();
			Log.e(TAG,
					"Launcher does not have the permission to launch "
							  intent
							  ". Make sure to create a MAIN intent-filter for the corresponding activity "
							  "or use the exported attribute for this activity. "
							  " intent="   intent, e);
		}
	}
	
	
	public void startSelectItem(int position) {
		Log.d(TAG, "startSelectItem position "   position);
		if(position<0||position>=getAppItemNum()){
			return;
		}

		Intent i = mHome.mIroomLoadApp.getItemInfo(position).intent;
		
		startActivitySafely(i);

	}

	public GOSTYLE getMenuStyle(int index) {
		GOSTYLE style = GOSTYLE.GO_CLASSIC;

		switch (index) {
		case 0:// 随机
			style = GOSTYLE.GO_RANDOM;
			break;
		case 1:
			style = GOSTYLE.GO_CLASSIC;
			break;
		case 2:
			style = GOSTYLE.GO_BALL;
			break;
		case 3:
			style = GOSTYLE.GO_CUBE;
			break;
		case 4:
			style = GOSTYLE.GO_CYLINDER;
			break;
		case 5:
			style = GOSTYLE.GO_MIDROTATE;
			break;
		case 6:
			style = GOSTYLE.GO_MIDS;
			break;
		case 7:
			style = GOSTYLE.GO_PUSH;
			break;
		case 8:
			style = GOSTYLE.GO_ROLL;
			break;
		case 9:
			style = GOSTYLE.GO_SHUTTER;
			break;
		case 10:
			style = GOSTYLE.GO_SMALLINOUT;
			break;
		case 11:
			style = GOSTYLE.GO_BINARY;
			break;
		case 12:
			style = GOSTYLE.GO_BAR;
			break;
		case 13:
			style = GOSTYLE.GO_BOXIN;
			break;
		case 14:
			style = GOSTYLE.GO_CIRCLE;
			break;
		case 15:
			style = GOSTYLE.GO_SMALLBOX;
			break;
		default:
			style = GOSTYLE.GO_CLASSIC;
			break;
		}
		return style;
	}

	public void setAppHome(IRoomActivity home) {
		mHome = home;
		final Resources resources = mHome.getResources();

        final DisplayMetrics metrics = resources.getDisplayMetrics();
		scale = metrics.density;
		
	}

	private void initRender(final int totalwidth,final int totalheight) {
		Log.d(TAG, "initRender");
		queueEvent(new Runnable() {

			//@Override
			public void run() {
				// TODO Auto-generated method stub
				
				Log.d(TAG, "initRender run!");
				int pageIndex = 0;

				muPages = new Group[PageNUM];
				iconcollection = new SimplePlane[PageNUM][];

				renderer.Pages = muPages;
				renderer.iconArr = iconcollection;

				for (pageIndex = 0; pageIndex < PageNUM; pageIndex  ) {
					muPages[pageIndex] = new Group();
					iconcollection[pageIndex] = new SimplePlane[CHILDNUM];
					for (int i = 0; i < CHILDNUM; i  ) {
						iconcollection[pageIndex][i] = new SimplePlane();
					}
				}

				panelframe = BitmapFactory.decodeResource(getResources(),
						R.drawable.panel_frame_big);

				for (int i = 0; i < PANEL_NUM; i  ) {
					panel[i] = new SimplePlane();
				}

				renderer.InitGoRender(CHILDNUM, CHILDNUM, SPREADFRAME, false,
						panel);
				
				initCalcData();
				
				isinit = true;
			}
		});
	}

	public int getAppAllPageNum() {
		int pagenum = 0;
		int ret = 2;

		pagenum = getAppItemNum() / PAGE_ITEM_NUM;
		ret = (getAppItemNum() % PAGE_ITEM_NUM == 0) ? pagenum
				: pagenum   1;
		if (ret == 0) {
			ret = 2;
		}
		Log.d(TAG, "getAppAllPageNum = "   ret);
		return ret;
	}

	public int getAppItemPageNum(int position) {
		return position / PAGE_ITEM_NUM;
	}

	public int getPageItemNum(int page_index) {
		int item_num = 0;
		if (page_index == getAppAllPageNum() - 1) {
			if(getAppItemNum() == getAppAllPageNum()*PAGE_ITEM_NUM){
				item_num = PAGE_ITEM_NUM;
			}
			else{
				item_num = getAppItemNum() % PAGE_ITEM_NUM;
			}
			
		} else {
			item_num = PAGE_ITEM_NUM;
		}

		return item_num;
	}

	public Bitmap getAppItemBmp(int position) {
		final ContentResolver cr = mContext.getContentResolver();
		Bitmap iconbmp = null;
		String icontext = null;
		IRoomApplicationInfo info = mHome.mIroomLoadApp.getItemInfo(position);
		
		iconbmp = info.iconBitmap;
		icontext = (String)info.title;
		
		// include icon and name
		Bitmap tempbmp = Bitmap.createBitmap(BITMAP_SIZE, BITMAP_SIZE,
				Config.RGB_565);
		Canvas c = new Canvas(tempbmp);
		Log.d(TAG,"creat tempbmp = "   tempbmp);
		
		if (iconbmp != null&&!iconbmp.isRecycled()) {
			int iconW = iconbmp.getWidth();
			int iconH = iconbmp.getHeight();
			c.drawBitmap(iconbmp, new Rect(0, 0, iconW, iconH), new Rect(
					(BITMAP_SIZE - ICON_SIZE) / 2, 0,
					(BITMAP_SIZE   ICON_SIZE) / 2, ICON_SIZE), null);
		}
		else{
			Log.d(TAG,"iconbmp is null");
		}

		if (icontext != null) {

            TextPaint textPaint = new TextPaint();
            textPaint.setTypeface(Typeface.DEFAULT);
            textPaint.setTextSize(13*scale);
            textPaint.setColor(0xffffffff);
            textPaint.setAntiAlias(true);
            StaticLayout layout = new StaticLayout(icontext, textPaint, (int)BITMAP_SIZE - 2 * TEXT_START,
                    Alignment.ALIGN_CENTER, 1, 0, true);
			c.translate(TEXT_START, ICON_SIZE);
  		    layout.draw(c);
		}

		return tempbmp;
	}
	
    static Bitmap getIconFromCursor(Cursor c, int iconIndex) {
        byte[] data = c.getBlob(iconIndex);
        
        try {
            return BitmapFactory.decodeByteArray(data, 0, data.length);
        } catch (Exception e) {
            return null;
        }
    }
    
	public void addMesh(Mesh mesh, int PageIndex) {
		muPages[PageIndex].add(mesh);
	}

	public void initCalcData() {
		int item_index = 0;
		int page_index = 0;
		int pagenum = getAppAllPageNum();
		int pageitemnum = 0;
		int x = 0, y = 0;
		int position = 0;
		int gridW = 0;
		int gridH = 0;

		Log.d(TAG, "initCalcData start !");

		gridW = (mViewWidth) / PAGE_ROW_NUM;
		gridH = (mViewHeight - BOTTOM_BAR_HEIGHT - VIEW_UP_MAGIN - VIEW_BOTTOM_MAGIN) / PAGE_LINE_NUM;

		Log.d(TAG, "totalheight"   mViewHeight);

		for (page_index = 0; page_index < pagenum; page_index  ) {

			pageitemnum = getPageItemNum(page_index);

			for (item_index = 0; item_index < pageitemnum; item_index  ) {

				position = page_index * PAGE_ITEM_NUM   item_index;
				Log.d(TAG, "position = "   position);

				Bitmap tempbmp = getAppItemBmp(position);
				Log.d(TAG,"init calc Data = "   tempbmp);
				x = (item_index % PAGE_ROW_NUM) * gridW   VIEW_LEFT_MAGIN;
				y = (item_index / PAGE_ROW_NUM) * gridH   VIEW_UP_MAGIN;

				iconcollection[page_index][item_index].Set(x, y, BITMAP_SIZE,
						BITMAP_SIZE, false, tempbmp);

				iconcollection[page_index][item_index].setVerticesLocation(x,
						y, BITMAP_SIZE, BITMAP_SIZE, mViewWidth, mViewHeight);

				addMesh(iconcollection[page_index][item_index], page_index);

			}
		}
		
	}

	public void startRender(boolean isUpdateOnly) {
     	int curscreen = 0;
    	int nextscreen = 0;
    	int count = 0;
    	int num1 = 0;
    	int num2 = 0;
    	
    	count = getAppAllPageNum();

    	if(mIsGoRight)
    	{
    		curscreen = mCurscreen;
    		nextscreen = (curscreen   1)%count;
    	}
    	else
    	{
    		curscreen = mCurscreen;	
    		nextscreen = (curscreen   count - 1)%count;
    	}
    	num1 = getPageItemNum(curscreen);
    	num2 = getPageItemNum(nextscreen);
    	
    	Log.d(TAG,"curscreen num:"   num1);
    	Log.d(TAG,"nextscreen num:"   num2);
    	Log.d(TAG,"curscreen :"   curscreen);
    	Log.d(TAG,"nextscreen :"   nextscreen);
    	
		updateumenusetparam();
		
		Log.d(TAG,"isoneframe:"   isoneframe);
		
		if(isSpreadAnim != -1||isoneframe||isUpdateOnly){
			setMenuRender(mCurStyle, xFrame, mXoffset, 0, mViewWidth, mIsGoRight,
					num1, num2,
					curscreen, nextscreen, mViewWidth, mViewHeight);
		}
		else{
			isinanim = false;
		}
		
		if(isSpreadAnim == -1)
		{
			isoneframe = false;
		}
		
	}

	private void setMenuRender(final GOSTYLE style, final float xframe,
			final float xoffset, final float yoffset, final float total_frame,
			final boolean isright, final int curnum, final int nextnum,
			final int curindex, final int nextindex, final int width,
			final int height) {
		Log.d(TAG, "setMenuRender");

		queueEvent(new Runnable() {
		//	@Override
			public void run() {
				Log.d(TAG, "setMenuRender run !!");
				// TODO Auto-generated method stub
				Log.d(TAG, "style = "   style);
				Log.d(TAG, "xframe = "   xframe);
				Log.d(TAG, "xoffset = "   xoffset);
				Log.d(TAG, "isright = "   isright);
				Log.d(TAG, "curnum = "   curnum);

				renderer.SetGoRender(style, xframe, xoffset, yoffset,
						total_frame, isright, curnum, nextnum, curindex,
						nextindex, width, height);
				
				requestRender();
			}
		});
		
	}

	public void startMenuAppRunnable(){
		isinanim = true;
		menuThread = new Thread(new menuAppRunnable());
		menuThread.start();
	}

	class menuAppRunnable implements Runnable {
	//	@Override
		public void run() {
			
			while (isinanim) {

				startRender(false);

				try {
					Thread.sleep(17);
				} catch (InterruptedException e) {
					Thread.currentThread().interrupt();
				}
			}
		}

	}
	
    private void updateumenusetparam() {
    	int count = 0;
    	
    	count = getAppAllPageNum();
    	computeScrollEX();
    	
    		//如果是球或者圆柱,需要播放收缩展开的帧数
    	if(mCurStyle == GOSTYLE.GO_CYLINDER||mCurStyle == GOSTYLE.GO_BALL)
    	{
    		if(isSpreadAnim == -1&&istpdown)//开始收缩
    		{
    			isSpreadAnim = 0;
    			xFrame = 0;
    		}
    		else if(isSpreadAnim == 0&&!istpdown&&xFrame == 0)//收缩到正常
    		{
    			isSpreadAnim = -1;
    			mXoffset = 0;
    			isoneframe = true;
    		}
    		else if(isSpreadAnim == 0&&xFrame == SPREADFRAME)//收缩到稳定态
    		{
    			isSpreadAnim = 1;
    		}
    		else if(mXoffset%mViewWidth== 0
    				&&(isSpreadAnim==1)
    				&&!istpdown
    				)//开始展开,没有必要达到稳定状态才展开
    		{
    			isSpreadAnim = 2;
    			
    			if(ischangepage)
    			{
    				xFrame = SPREADFRAME 1;
    			}
    			else
    			{
    				xFrame = SPREADFRAME;
    			}
    		}
    		else if(isSpreadAnim == 2&&(xFrame == 2*SPREADFRAME||xFrame == 0))//展开到正常态
    		{
    			isSpreadAnim = -1;
    			isoneframe = true;
    			if(ischangepage)
    			{
    				if(mIsGoRight)
    				{
    					mCurscreen  ;
    				}
    				else
    				{
    					mCurscreen  = count;
    					mCurscreen--;
    				}
    				
    				mCurscreen = mCurscreen%count;
    				setCurScreen(mCurscreen);
    	            ischangepage = false;
    			}

    		}
    		
    		if(isSpreadAnim == 0)
    		{
    			if(istpdown)
    			{
    				xFrame   ;
    			}
    			else
    			{
    				if(ischangepage)
    				{
    					xFrame   ;
    				}
    				else
    				{
    					xFrame --;
    				}
    			}
    			
    		}
    		else if(isSpreadAnim == 2)
    		{
    			if(ischangepage)
    			{
    				xFrame   ;
    			}
    			else
    			{
    				xFrame --;
    			}
    		}
    	}
    	else
    	{
    		xFrame = 0;
    		if(isSpreadAnim == -1&&istpdown)//
    		{
    			isSpreadAnim = 1;
    		}
    		else if(mXoffset%mViewWidth== 0
    				&& isSpreadAnim == 1 
    				&& !istpdown
    				)
    		{
    			isSpreadAnim = -1;
    			isoneframe = true;
    			
    			if(ischangepage)
    			{
    				if(mIsGoRight)
    				{
    					mCurscreen  ;
    				}
    				else
    				{
    					mCurscreen  = count;
    					mCurscreen--;
    				}
    				mCurscreen = mCurscreen%count;
    				setCurScreen(mCurscreen);
    	            ischangepage = false;
    			}
    		}
    	}
    	Log.d(TAG,"isSpreadAnim :"   isSpreadAnim);
    }
    
    private void updateNumView(){
    	if(mHome.mAppNumView != null){
    		mHome.mAppNumView.updateScreen(mCurscreen, getAppAllPageNum());
    	}
    	
    }
    
    private  Handler mHandler = new Handler(){ 
        @Override
        public void handleMessage(Message msg)
        {
        	updateNumView();
        }
    };
    
 	public int getAppItemNum() {
 		mAppTotalNum = mHome.mIroomLoadApp.getAppItemNum();
 		Log.d(TAG, "getAppItemNum = "   mAppTotalNum);
 		
		return mAppTotalNum;
	}

}


标签: Android

实例下载地址

安卓 EyeRoom 完整源码下载

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警