AndroidのSplash起動図の2つの動的な切り替えを詳細に説明する。
寒いスタートの時はネットの原因を考慮して、デフォルトでローカル画像を表示します。
熱起動時は、取得した起動図が新しい動きかどうかによって置き換えられます。
以下は動的な置換を実現する2つの方法である。
Glideのキャッシュダウン
GlideのdownloadOnly方法は、画像のダウンロード機能を実現することができる。
画像のダウンロード
プロジェクトで使うclientはok httpでInterceptorブロックを統一しています。ダウンロード画像を使っていますので、単独で提出します。はserviceを作成し、プロファイルAndroid Manifest.xmlに を登録する。は、画像アドレスを取得した後、startService()をserviceに伝達する。 serviceのワンストップCommand()で画像アドレスを取得し、ImgServiseを作成して をダウンロードし始めました。
ダウンロードコードは以下の通りです。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
熱起動時は、取得した起動図が新しい動きかどうかによって置き換えられます。
以下は動的な置換を実現する2つの方法である。
Glideのキャッシュダウン
GlideのdownloadOnly方法は、画像のダウンロード機能を実現することができる。
画像のダウンロード
Observable.just(RetrofitHelper.API_BASE_URL + img)
.subscribeOn(Schedulers.newThread())
.subscribe(new Action1<String>() {
@Override
public void call(String s) {
try {
Glide.with(getApplicationContext())
.load(s)
.downloadOnly(720, 1280)
.get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
});
起動するたびに取得します。
File file = new File(sp_splash_logo);
if (file.exists()) {
Glide.with(getApplicationContext()).load(file).into(mIvSplash);
} else {
mIvSplash.setImageResource(R.mipmap.splash);
}
Retofit+RxJavaのローカルダウンロードプロジェクトで使うclientはok httpでInterceptorブロックを統一しています。ダウンロード画像を使っていますので、単独で提出します。
ダウンロードコードは以下の通りです。
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(RetrofitHelper.API_BASE_URL)
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
ImgServise imgServise = retrofit.create(ImgServise.class);
imgServise.downloadPicFromNet(img)
.subscribeOn(Schedulers.newThread())
.subscribe(new Action1<ResponseBody>() {
@Override
public void call(ResponseBody responseBody) {
try {
long contentLength = responseBody.contentLength();
InputStream is = responseBody.byteStream();
File file = new File(Environment.getExternalStorageDirectory(), BuildConfig.APPLICATION_ID + "splash.png");
FileOutputStream fos = new FileOutputStream(file);
BufferedInputStream bis = new BufferedInputStream(is);
byte[] buffer = new byte[1024];
int len;
long sum = 0L;
while ((len = bis.read(buffer)) != -1) {
fos.write(buffer, 0, len);
sum += len;
fos.flush();
//
Log.d("TAG---", sum + "/" + contentLength);
}
fos.close();
bis.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
stopSelf();
}
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
stopSelf();
}
});
取得した画像の名前を変更して表示します。以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。