Sono nuovo alla piattaforma Android. Desidero sviluppare una applicazione live wallpaper live. Quando sono stato perquisito su questo motore di ricerca, molti di loro hanno creato uno sfondo dal vivo come codice (usando SurfaceView
e Canvas
), non ne sono molto consapevole. Qui il mio dubbio è, qualsiasi possibile impostare le immagini .gif come sfondo animato.È possibile impostare un file GIF animato come sfondo animato in Android?
risposta
Questo è il servizio di base dello sfondo (come fornito nell'esercitazione Live Wallpaper) hackerato per visualizzare una gif animata.
Primo: crea un progetto & imposta il file manifest come sfondo animato.
Poi - scaricare una gif, come questo
Salva che gif in res/raw/nyan.gif
nel progetto.
Creare un servizio di sfondi animati, come mostrato in questo esempio.
public class NyanNyanService extends WallpaperService {
static final String TAG = "NYAN";
static final Handler mNyanHandler = new Handler();
/**
* @see android.service.wallpaper.WallpaperService#onCreate()
*/
@Override
public void onCreate() {
super.onCreate();
}
/**
* @see android.service.wallpaper.WallpaperService#onCreateEngine()
*/
@Override
public Engine onCreateEngine() {
try {
return new NyanEngine();
} catch (IOException e) {
Log.w(TAG, "Error creating NyanEngine", e);
stopSelf();
return null;
}
}
class NyanEngine extends Engine {
private final Movie mNyan;
private final int mNyanDuration;
private final Runnable mNyanNyan;
float mScaleX;
float mScaleY;
int mWhen;
long mStart;
NyanEngine() throws IOException {
InputStream is = getResources().openRawResource(R.raw.nyan);
if (is != null) {
try {
mNyan = Movie.decodeStream(is);
mNyanDuration = mNyan.duration();
} finally {
is.close();
}
} else {
throw new IOException("Unable to open R.raw.nyan");
}
mWhen = -1;
mNyanNyan = new Runnable() {
public void run() {
nyan();
}
};
}
@Override
public void onDestroy() {
super.onDestroy();
mNyanHandler.removeCallbacks(mNyanNyan);
}
@Override
public void onVisibilityChanged(boolean visible) {
super.onVisibilityChanged(visible);
if (visible) {
nyan();
} else {
mNyanHandler.removeCallbacks(mNyanNyan);
}
}
@Override
public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) {
super.onSurfaceChanged(holder, format, width, height);
mScaleX = width/(1f * mNyan.width());
mScaleY = height/(1f * mNyan.height());
nyan();
}
@Override
public void onOffsetsChanged(float xOffset, float yOffset, float xOffsetStep,
float yOffsetStep, int xPixelOffset, int yPixelOffset) {
super.onOffsetsChanged(xOffset, yOffset, xOffsetStep, yOffsetStep, xPixelOffset, yPixelOffset);
nyan();
}
void nyan() {
tick();
SurfaceHolder surfaceHolder = getSurfaceHolder();
Canvas canvas = null;
try {
canvas = surfaceHolder.lockCanvas();
if (canvas != null) {
nyanNyan(canvas);
}
} finally {
if (canvas != null) {
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
mNyanHandler.removeCallbacks(mNyanNyan);
if (isVisible()) {
mNyanHandler.postDelayed(mNyanNyan, 1000L/25L);
}
}
void tick() {
if (mWhen == -1L) {
mWhen = 0;
mStart = SystemClock.uptimeMillis();
} else {
long mDiff = SystemClock.uptimeMillis() - mStart;
mWhen = (int) (mDiff % mNyanDuration);
}
}
void nyanNyan(Canvas canvas) {
canvas.save();
canvas.scale(mScaleX, mScaleY);
mNyan.setTime(mWhen);
mNyan.draw(canvas, 0, 0);
canvas.restore();
}
}
}
Questo sarà essenzialmente scalare il gatto Nyan-nyan per adattarsi allo schermo e animare in perpetuo.
Una carta da parati manifesta vivo guarda specie-di-così (questo esempio non contiene un'attività di configurazione):
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="your.nyan.nyan.package"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="10" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/application_nyan" >
<service
android:label="@string/wallpaper_nyan"
android:name=".NyanNyanService"
android:permission="android.permission.BIND_WALLPAPER">
<intent-filter>
<action android:name="android.service.wallpaper.WallpaperService" />
</intent-filter>
<meta-data android:name="android.service.wallpaper" android:resource="@xml/nyan" />
</service>
</application>
</manifest>
L'AndroidManifest.xml ha un riferimento ad un file in res/xml
, in questo caso il nome "nyan.xml":
<?xml version="1.0" encoding="utf-8"?>
<wallpaper xmlns:android="http://schemas.android.com/apk/res/android" />
ma non c'è uscita sullo schermo, nella mia console mostra, cat = [android.intent.category.LAUNCHER] flg = 0x10000000 cmp = test.anim/.NyanNyanService} da null (pid = 7019, uid = 2000) richiede android.permission.BIND_WALLPAPER – Aerrow
Penso di fare errori nel file manifest, potresti pubblicare il file manifest. – Aerrow
hm. Sì, non è possibile avviare uno sfondo live da qualsiasi cosa che non contenga l'autorizzazione BIND_WALLPAPER (che è riservata alle applicazioni di sistema), ad esempio per testare lo sfondo, selezionarlo nel raccoglitore di sfondi live nella schermata iniziale. – Jens
- 1. Supporto GIF animato Android
- 2. Come creare uno sfondo animato Android animato?
- 3. Errore encoder gif animato
- 4. Android attività - sfondo animato drawable
- 5. GIF animato in HTML5 canvas
- 6. Schermo animato animato iOS
- 7. Sfondo animato utilizzando Libgdx
- 8. UserControl Sfondo pulsante animato
- 9. Creare un file .gif animato da .jpeg/png
- 10. Controllo sfondo animato in WPF?
- 11. Come ridimensionare il file gif animato usando C#?
- 12. Visualizzazione di testo animato animato Marker
- 13. Gif animato per avi su linux
- 14. Ridimensionamento gif animato con sorl-thumbnail
- 15. Utilizzo di FrameLayout come sfondo animato
- 16. Bordo tratteggiato animato in Android
- 17. presentModalViewController: animato è deprecato
- 18. Converti ogni frame GIF animato in un'immagine Buffered separata
- 19. carattere impressionante filatore animato attraverso lo sfondo
- 20. Android come creare setSelection animato() per listfragment?
- 21. Clipping un div animato
- 22. Gif animato solo cicli una volta in Chrome e Firefox
- 23. Riproduzione di un file di immagine GIF animato in visualizzazione immagini
- 24. UIPopoverController non animato
- 25. Caricatore animato come Snapchat
- 26. AnimatedVectorDrawable non animato
- 27. È possibile tracciare una linea con SpriteKit animato?
- 28. Android - Visualizza barra di stato animato icona
- 29. LibGDX c'è un attore che è animato?
- 30. UIScrollView: differenza tra setContentOffset: animato e scrollRectToVisible: animato
Fare riferimento [a questa risposta] (http://stackoverflow.com/a/7772170/967142) – Jens
@Jens: grazie per il vostro riproduzione, se si dispone di alcun codice di esempio come fai questo, – Aerrow
Bene, questo ti mostra [come] (http: //droid-blog.n et/2011/10/14/tutorial-how-to-use-gif animate-in-android-part-1 /) – Jens