2014-01-24 2 views
0

I가 다음 라이브 배경 화면 :어떻게 라이브 배경 화면에서 변수의 재 초기화를 방지하기 위해

public class GLWallpaperVideoDemo extends GLWallpaperService { 
public static final String folder = "video"; 
public static final String TAG = "GLWVD"; 
public static String videoName="VIDEOWALL.avi"; 
//video variables 
public int videoWidth,videoHeight; 
public boolean videoWideScreen=false; 
VideoRenderer renderer = null; 

public GLWallpaperVideoDemo() { 
super(); 
Log.e(TAG,"constructor()"); 
} 

@Override 
public void onCreate() { 
Log.e(TAG,"onCreate()"); 
    super.onCreate(); 
//transfer video to sdcard 
Log.d(TAG,"transferring video asset to sdcard"); 
copyVideoToCard(); 
Log.d(TAG,"transferred"); 
//if videoName == blankVideo, then don't load anything 
//TODO 
NativeCalls.initVideo(); 
Log.d(TAG,"Opening video"); 
NativeCalls.loadVideo("file:/"+"sdcard/" 
       +GLWallpaperVideoDemo.videoName); 
//set video dimensions (now that we opened the video) 
videoWidth = NativeCalls.getVideoWidth(); 
videoHeight = NativeCalls.getVideoHeight(); 
videoWideScreen = (videoWidth > videoHeight) ? true : false; 
} 


private VideoEngine mEngine=null; 

@Override 
public Engine onCreateEngine() { 
Log.e(TAG,"onCreateEngine()"); 
    mEngine = new VideoEngine(); 
return mEngine; 
} 

class VideoEngine extends GLEngine { 

VideoEngine() { 
    super(); 
    Log.e(TAG,"VideoEngine VideoEngine()"); 
    if(renderer==null)renderer = new VideoRenderer(GLWallpaperVideoDemo.this, 
       this); 
    setRenderer(renderer); 
    //setRenderMode(RENDERMODE_WHEN_DIRTY); 
    setRenderMode(RENDERMODE_CONTINUOUSLY); 
} 

VideoRenderer getRenderer() { return renderer; } 

} 
} 

그리고이 렌더러입니다 :

public class VideoRenderer implements GLWallpaperService.Renderer { 
static private String TAG="Renderer>>>>>>>>>>>>"; 
static boolean runOnce = false; 
//MediaPlayer mediaPlayer = MediaPlayer.create(MyApp.getContext(), R.raw.gunfireusedforboardstage); 

//screen variables 
int screenWidth=50,screenHeight=50; 
int drawWidth, drawHeight; //dimensions of fit-to-screen video 
int paddingX, paddingY; //padding for fit-to-screen-video 
//texture variables 
int powWidth,powHeight; 
//pointers 
GLWallpaperVideoDemo mParent; 
GLWallpaperVideoDemo.VideoEngine mParentEngine; 
//lock 
static public Object lock = new Object(); 
//fps 
long fpsTime; 
public int framecount; 

public VideoRenderer() { 
super(); 
Log.e(TAG,"Constructor()"); 
} 

public VideoRenderer(GLWallpaperVideoDemo p, 
      GLWallpaperVideoDemo.VideoEngine e) { 
super(); 
mParent = p; 
mParentEngine = e; 
Log.e(TAG,"constructor()"); 
} 

public void onSurfaceCreated(GL10 gl, EGLConfig config) { 
Log.e(TAG, "onSurfaceCreated()"); 

} 

void process(int width, int height) { 
setScreenDimensions(width, height); 
Log.d(TAG,"Killing texture"); 
NativeCalls.closeOpenGL(); 
setTextureDimensions(screenWidth, screenHeight); 
setFitToScreenDimensions(mParent.videoWidth, 
       mParent.videoHeight); 
if (!runOnce) { 
    Log.e(TAG,"Preparing frame"); 
    NativeCalls.prepareStorageFrame(); 
} 
NativeCalls.initOpenGL(); 
runOnce = true; 
} 

//This gets called whenever you preview the wallpaper or set the 
//wallpaper 
public void onSurfaceChanged(GL10 gl, int width, int height) { 
Log.e(TAG,"onSurfaceChanged()"); 
synchronized(lock) { 
    process(width, height); 
} 
} 

public void onDrawFrame(GL10 gl) { 
synchronized(lock) { 
    //Log.d(TAG,"Drawing ...."); 
    NativeCalls.getFrame(); // from video 
    NativeCalls.drawFrame(); // using openGL 
    if(framecount>300)framecount=0; 
    framecount++; 
    //Log.e("framecount",Integer.toString(framecount)); 

    if(framecount==117 || framecount==124 ||framecount==137 ||framecount==145||framecount==159||framecount==167) 

    {new Thread(new Runnable() { 
     public void run() { 
      MediaPlayer mp= MediaPlayer.create(MyApp.getContext(), R.raw.gunfireusedforboardstage); 
      mp.start(); 
      mp.setOnCompletionListener(new OnCompletionListener() { 
       public void onCompletion(MediaPlayer mp) { 
        mp.release(); 

       }; 
      }); 
     } 
    }).start();} 

    if (MyDebug.showFPS) { 
    final float fpsRate; 
     fpsRate = 1000f/((float) (SystemClock.uptimeMillis() 
         - fpsTime)); 
     fpsTime = SystemClock.uptimeMillis(); 
     Log.d(TAG, 
      TAG+"drawFrame(): fps: " 
      +String.valueOf(fpsRate) 
     ); 
    } 
} 
} 

지금 당신이 렌더러 내부 변수 framecount 참조?

배경 화면을 열 때마다 다시 초기화됩니다 !!!

결과는 렌더러가 작업을 계속되지만 framecount

결과가 프레임이 더 이상 MediaPlayer가와 동기화되지 않은 것입니다 0으로 다시 설정되어 있다는 점이다.

답변

0

해결 :

내가 변수 정적 :-)

+0

@WATTO의 스튜디오를 만든 ???? –

관련 문제