详解Android的Splash启动图的两种动态切换方式

 更新时间:2017年06月27日 10:47:48   作者:倔强的炉包  
本篇文章主要介绍了详解Android的Splash启动图的两种动态切换方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

冷启动的时候因为要考虑网路原因,默认显示一张本地图片。

热启动的时候会根据获取的启动图是否是新动态替换。

以下是实现动态替换的两种方式:

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是okhttp并统一了Interceptor拦截器,在用到下载图片,所以就单独提出来了。

  1. 创建一个service,并在配置文件AndroidManifest.xml中注册
  2. 在获取到图片地址之后startService(),并传递到service中
  3. 在service的onStartCommand()方法中获取到图片地址,并创建ImgServise开始下载

下载的代码如下

  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();
        }
      });

获取到的图片重新命名再进行显示。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Android通过SOCKET下载文件的方法

    Android通过SOCKET下载文件的方法

    这篇文章主要介绍了Android通过SOCKET下载文件的方法,实例分析了Android使用Socket进行文件传输的技巧,需要的朋友可以参考下
    2015-12-12
  • Android开发中Intent.Action各种常见的作用汇总

    Android开发中Intent.Action各种常见的作用汇总

    今天小编就为大家分享一篇关于Android开发中Intent.Action各种常见的作用汇总,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • Android开发笔记之探秘WebView

    Android开发笔记之探秘WebView

    浏览器控件是每个开发环境都具备的,这为马甲神功提供了用武之地,windows的有webbrowser,android和ios都有webview。只是其引擎不同,相对于微软的webbrowser,android及ios的webview的引擎都是webkit,对Html5提供支持。本篇主要介绍android的webview。
    2014-08-08
  • Android自带的四种线程池使用总结

    Android自带的四种线程池使用总结

    本篇文章主要介绍了Android自带的四种线程池使用总结,详细的介绍了4种线程池的用法,具有一定的参考价值,有兴趣的小伙伴可以了解一下
    2017-07-07
  • Android 仿微信发动态九宫格拖拽、删除功能

    Android 仿微信发动态九宫格拖拽、删除功能

    这篇文章主要介绍了Android 仿微信发动态九宫格拖拽、删除功能,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • Android计算器编写代码

    Android计算器编写代码

    这篇文章主要为大家分享了Android计算器编写代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • Android实现平滑翻动效果

    Android实现平滑翻动效果

    这篇文章主要为大家详细介绍了Android实现平滑翻动效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • Android百度地图添加Marker失真问题的解决方案

    Android百度地图添加Marker失真问题的解决方案

    本篇文章主要介绍了Android百度地图添加Marker失真问题的解决方案,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • phonegap教程使用jspdf库在应用中生成pdf文件(pdf生成方法)

    phonegap教程使用jspdf库在应用中生成pdf文件(pdf生成方法)

    在PhoneGap应用中生成pdf文件,实现起来很简单,使用JSPDF这个标准的JavaScript类库来实现这个功能
    2014-01-01
  • Android开发自定义短信验证码实现过程详解

    Android开发自定义短信验证码实现过程详解

    这篇文章主要为大家介绍了Android开发自定义短信验证码实现过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06

最新评论