2012-10-19 18 views
5

próbuję rozwijać Android żywo tapety korzystając OpenGL tapety usługę, jestem w stanie stworzyć na żywo tapety, jak w tym example Mark F Guerra Ale chcę dodać sprite animacja do mojej tapety.Jak załadować zasobów lub aktywów w służbie GLWallpaper

Mam już utworzoną animację sprite OpenGL ES w innym projekcie. Po prostu chcę odtworzyć animację w projekcie na żywo tapety.

Ale w moim projekcie tapety na żywo jestem nie stanie uzyskać Context i załadować moje obrazy z aktywów lub zasobów

Wszelkie sugestii lub kody próbek lub link o ładowanie resourses lub pliki aktywów podczas korzystania glwallpaper serwis będzie bardzo pomocny.

Wszystkie sugestie i/lub przykładowe kody są mile widziane.

Odpowiedz

1

Możemy wykorzystać kontekst, jak pokazano poniżej ..

in wallpaper service class: 
------------------- 
renderer = new GlRenderer(this); 

in renderer class: 
---------------- 
private Context context; 

public GlRenderer(Context context) { 
this.context = context; 

Zamiast this możemy użyć getAssets() lub getResources() jako parametr do Renderer.
Po użyciu getAssets() można uzyskać pliki zapisane w folderze zasobów i za pomocą getResources() można uzyskać pliki umieszczone w folderze zasobów w projekcie.

1

Przekaż kontekst z silnika do renderera. Oto przykładowy kod do załadowania zasobu. tzn. resourceID to Twoja bitmapa R.drawable.xxx. Mam to wewnątrz klasy atlasów tekstur, które stworzyłem, więc kilka rzeczy może nie być całkowicie zawartych w metodzie. Na przykład opcje, których mogę użyć do załadowania bitmapy, będą zawierać inscaled = false, ale cokolwiek działa dla ciebie. Zmodyfikowałem także to, aby na przykład usunąć obsługę błędów.

/** 
* Load the resource and push it to the gpu memory, setup default values 
* @param gl 
* @param context 
* @param resourceID 
* @return glTextureID 
* 
*/ 
public int loadFromContext(GL10 gl, Context context, int resourceID) { 
    mResourceID = resourceID; 
    Bitmap bmp = BitmapFactory.decodeResource(context.getResources(), resourceID, sBitmapOptions); 
    sourceWidth = bmp.getWidth(); 
    sourceHeight = bmp.getHeight(); 
    gl.glGenTextures(1, mGLTextures, 0); 
    mGLTextureID = mGLTextures[0]; 

    // bind and set min and mag scaling to bilinear 
    gl.glBindTexture(GL10.GL_TEXTURE_2D, mGLTextureID); 
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR); 
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR); 

    // repeat by default 
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_REPEAT); 
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_REPEAT); 

    // upload bmp to video memory 
    GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bmp, 0); 

    // check error 
    int error = gl.glGetError(); 
    if (error != GL10.GL_NO_ERROR) { 
     // cleanup 
     bmp.recycle(); 
     bmp = null; 
     mLoaded = false; 
      // error handling here 
    } else { 

     // unbind. 
     gl.glBindTexture(GL10.GL_TEXTURE_2D, 0); 
     bmp.recycle(); 
     bmp = null; 
     mLoaded = true; 
     mDirty = true; 

     } 
     return mGLTextureID; 
} 
Powiązane problemy