Próbuję opracować animowaną tapetę na Androida za pomocą usługi tapet OpenGL
, jestem w stanie stworzyć animowaną tapetę, tak jak w tym przykład autorstwa Marka F Guerra Ale chcę dodać trochę animacji sprite do mojej tapety.
Stworzyłem już animację duszka OpenGL ES
w innym projekcie. Chcę tylko odtworzyć moją animację w projekcie tapety na żywo.
Ale w moim projekcie tapety na żywo nie mogę uzyskać Context
i załadować moich obrazów z zasobów lub zasobów
Wszelkie sugestie, przykładowe kody lub linki dotyczące ładowania zasobów lub plików zasobów podczas korzystania z usługi glwallpaper
będą bardzo pomocne.
Wszelkie sugestie i/lub przykładowe kody są mile widziane.
2 odpowiedzi
Możemy użyć kontekstu, 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 parametru do renderera.
Przy użyciu getAssets()
możesz uzyskać pliki zapisane w folderze zasobów i używając getResources()
możesz pobrać pliki umieszczone w folderze zasobów w swoim projekcie.
Przekaż kontekst z silnika do renderera. Oto przykładowy kod do załadowania zasobu. tj. ResourceID to twoja bitmapa R.drawable.xxx. Mam to w klasie atlasu tekstur, którą stworzyłem, więc kilka rzeczy może nie być całkowicie zawartych w metodzie. Na przykład opcje, których mógłbym użyć do załadowania mapy bitowej, obejmowałyby inscaled = false, ale cokolwiek działa dla ciebie. Zmodyfikowałem to również, 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;
}
Podobne pytania
Nowe pytania
android
Android to mobilny system operacyjny Google, używany do programowania lub tworzenia urządzeń cyfrowych (smartfony, tablety, samochody, telewizory, Wear, Glass, IoT). W przypadku tematów związanych z Androidem użyj tagów specyficznych dla Androida, takich jak android-intent, android-activity, android-adapter itp. W przypadku pytań innych niż programowanie lub programowanie, ale związanych ze strukturą Androida, użyj tego linku: https: // android.stackexchange.com.