Splash Screen加载网络图片实现欢迎页的两种方法_ljssdr的博客-程序员宝宝

技术标签: 异步加载网络图片  android 欢迎页  android  Splash Screen  android 加载网络图片  

Splash Screen加载网络图片可以用两种方法,一般用在开启app时显示公司logo,广告,或者欢迎页,介绍两种方法来处理:异步加载和子线程处理。

第一种是异步加载的方法
在onCreate中设置
/**异步加载*/
new FetchDataTask().execute(url);

然后编写异步加载的方法
/**异步加载*/
	public class FetchDataTask extends AsyncTask<String,Void,Bitmap>{
    

        //执行前调用
        @Override
        protected void onPreExecute() {
    
            super.onPreExecute();
        }

        //执行后台任务
        @Override
        protected Bitmap doInBackground(String... strings) {
    
            Bitmap bitmap=null;
            try {
    
                bitmap= Utils.getBitmap(url);
            } catch (Exception e) {
    
                e.printStackTrace();
            }
            return bitmap;
        }

        //任务完成时调用
        @Override
        protected void onPostExecute(Bitmap bitmap) {
    
            super.onPostExecute(bitmap);
            imageView.setImageBitmap(bitmap);
        }
    }


完整代码
package com.dxsport;

import com.dxsport.common.Utils;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;

public class SplashScreenActivity extends Activity {
    

	private String url = "http://tupian.enterdesk.com/2015/saraxuss/04/17/gou/1/3.jpg";
	private ImageView imageView;
	Bitmap bitmap = null;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
    
		super.onCreate(savedInstanceState);
		this.requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏 
		this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);//去掉信息栏
		setContentView(R.layout.splash_screen);
		
		imageView = (ImageView) findViewById(R.id.adImage);
		
		/**异步加载*/
		new FetchDataTask().execute(url);
		
	
		new Handler().postDelayed(new Runnable() {  
 			@Override  
 			public void run() {  
 				Intent  i = new Intent(SplashScreenActivity.this, MainActivity.class);
 				startActivity(i);
 				SplashScreenActivity.this.finish(); 
 			}
 		},3000); 
	}
	
	/**异步加载*/
	public class FetchDataTask extends AsyncTask<String,Void,Bitmap>{
    

        //执行前调用
        @Override
        protected void onPreExecute() {
    
            super.onPreExecute();
        }

        //执行后台任务
        @Override
        protected Bitmap doInBackground(String... strings) {
    
            Bitmap bitmap=null;
            try {
    
                bitmap= Utils.getBitmap(url);
            } catch (Exception e) {
    
                e.printStackTrace();
            }
            return bitmap;
        }

        //任务完成时调用
        @Override
        protected void onPostExecute(Bitmap bitmap) {
    
            super.onPostExecute(bitmap);
            imageView.setImageBitmap(bitmap);
        }
    }
	
	
}


第二种是添加子线程的方法
在onCreate中设置

// 开启一个子线程,进行网络操作,等待有返回结果,使用handler通知UI  
		new Thread(networkTask).start();

然后编写子线程方法

Handler handler = new Handler() {  
		@Override  
		public void handleMessage(Message msg) {  
			super.handleMessage(msg);  
			Bundle data = msg.getData();  
			Bitmap bitmap = data.getParcelable("bitmap");
			// UI界面的更新等相关操作  
			imageView.setImageBitmap(bitmap);
		}  
	};  
	/** 
	 * 网络操作相关的子线程 
	 */  
	Runnable networkTask = new Runnable() {  
  
		@Override  
		public void run() {  
			// 在这里进行 http request.网络请求相关操作  
			Message msg = new Message();  
			Bundle data = new Bundle();  
			Bitmap bitmap = Utils.getBitmap(url);
			data.putParcelable("bitmap", bitmap);
			msg.setData(data);  
			handler.sendMessage(msg);  
		}  
	};  



完整代码
package com.dxsport;

import com.dxsport.common.Utils;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;

public class SplashScreenActivity extends Activity {
    

	private String url = "http://tupian.enterdesk.com/2015/saraxuss/04/17/gou/1/3.jpg";
	private ImageView imageView;
	Bitmap bitmap = null;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
    
		super.onCreate(savedInstanceState);
		this.requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏 
		this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);//去掉信息栏
		setContentView(R.layout.splash_screen);
		
		imageView = (ImageView) findViewById(R.id.adImage);
		
		
		
		// 开启一个子线程,进行网络操作,等待有返回结果,使用handler通知UI  
		new Thread(networkTask).start();  

		
		new Handler().postDelayed(new Runnable() {  
 			@Override  
 			public void run() {  
 				Intent  i = new Intent(SplashScreenActivity.this, MainActivity.class);
 				startActivity(i);
 				SplashScreenActivity.this.finish(); 
 			}
 		},3000); 
	}
	

	Handler handler = new Handler() {  
		@Override  
		public void handleMessage(Message msg) {  
			super.handleMessage(msg);  
			Bundle data = msg.getData();  
			Bitmap bitmap = data.getParcelable("bitmap");
			// UI界面的更新等相关操作  
			imageView.setImageBitmap(bitmap);
		}  
	};  
	/** 
	 * 网络操作相关的子线程 
	 */  
	Runnable networkTask = new Runnable() {  
  
		@Override  
		public void run() {  
			// 在这里进行 http request.网络请求相关操作  
			Message msg = new Message();  
			Bundle data = new Bundle();  
			Bitmap bitmap = Utils.getBitmap(url);
			data.putParcelable("bitmap", bitmap);
			msg.setData(data);  
			handler.sendMessage(msg);  
		}  
	};  

}


Utils 类
package com.dxsport.common;


import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

public class Utils {
    
	
	 /**通过传入的图片地址,获取图片*/
	public static Bitmap getBitmap(String url){
    
		Bitmap bitmap = null;
		try {
    
            HttpURLConnection connection= (HttpURLConnection) (new URL(url)).openConnection();
            InputStream is=connection.getInputStream();
            bitmap= BitmapFactory.decodeStream(is);
        } catch (Exception e) {
    
            e.printStackTrace();
        }
		return bitmap;
	}

}

splash_screen.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/adImage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ljssdr/article/details/70144509

智能推荐

新手上路,Kotlin学习笔记(六)---运算符重载和其它约定_WonderfulMTF的博客-程序员宝宝

        入行没几年的小码农,近期学习Kotlin,做一份笔记记录,此文依据《Kotlin实战》这本书的流程记录,部分示例内容均摘自《Kotlin实战》,记下自己的理解,本篇记录在Kotlin中我们如何对运算符进行重载,另外还有一些Kotlin中的约定。        //上一篇  新手上路,Kotlin学习笔记(五)---Kotlin中的类型系统一、运算符的重载        有时候我们会...

web开发中常用http headers总结_weixin_33819479的博客-程序员宝宝

request headersAccept-Language: 支持的语言类型,类似于一个数组,每种语言对应一个权重(0-1的数字),一般用来做多语言用Content-Type: 请求体的类型application/x-www-form-urlencoded: a=1&amp;b=2application/json: {"a": "1", "b": "2"}multipart/f...

Oaid_Gerry_Liang的博客-程序员宝宝_oaid

自己项目中遇到了一个获取oaid的需求,看了下该作者的demoAndroid获取OAID博客地址感谢作者的同时自己也对这个demo进行了优化,结尾附上自己的项目github地址1 什么是OAID?用来做什么的?随着大数据和人工智能时代的到来,数据的价值也逐渐增加,移动终端设备标识码,如国际移动设备识别码(IMEI)、Wi-Fi MAC地址、SIM卡国际移动用户识别码(IMSI)和蓝牙地址等...

BigTable_llwszjj的博客-程序员宝宝

Bigtable为Google设计的一个分布式结构化数据存储系统,用来处理Google的海量数据。Google内包括Web索引、Google地球等项目都在使用Bigtable存储数据。尽管这些应用需求差异很大,但是Bigtable还是提供了一个灵活的、高性能的解决方案。-------------------------------------------------------------

刷题-Leetcode-541. 反转字符串 II(字符串)_萌的咋会有的博客-程序员宝宝

541. 反转字符串 II题目链接来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-string-ii/submissions/著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。题目描述题目分析注意:有括号的得加括号class Solution {public: string reverseStr(string s, int k) { int n = s.size

随便推点

linux-glibc升级到2.15版本_爬行中的菜鸟的博客-程序员宝宝

一、查询glibc等级首先查看当前系统的glibc等级,使用命令:strings /lib64/libc.so.6 |grep GLIBC (任何目录下都可以执行,建议在根目录下执行)[外链图片转存中…(img-o9IYnHk2-1588083897786)]...

oracle toplevel 用法,静默安装Oracle数据库10g篇_strustis的博客-程序员宝宝

静默安装Oracle数据库10g篇===========================================================================以下是在Linux系统上静默安装Oracle数据库10g的实践过程,主要分为以下两个步骤:Step 1.静默安装Oracle数据库10g软件1. 使用OUI录制响应文件,记录安装过程执行以下命令,然后在OUI中根据提...

linux 系统编程-学习笔记6-main函数/atexit函数/动态库、静态库/_MAKE_TROUBLE的博客-程序员宝宝_main atexit

_________________________________________________________________________________________________________main函数【进程】结束,会做那些事情?exit/returnexit(0)/return 0 ;  正常返回exit(-1)/return -1;异常返回=====

使用Git连接码云操作步骤_青丝到无发的博客-程序员宝宝_git 使用码云

1.下载git,下载成功后鼠标右击出现以下内容说明下载并安装成功。2.配置项目上传显示的上传者名称git config --global user.name "xxx"3.配置项目上传显示的上传者邮箱git config --global user.email "[email protected]"4.配置使用SSH公钥连接连接ssh-keygen -t rsa -C "[email protected]" (此处的邮箱是登录码云使用的邮箱)三次enter后完成绑定,成功会显示如下内容:

H5 JS鼠标选中和移出事件_三尺秋水一点飞鸿的博客-程序员宝宝

&amp;lt;!DOCTYPE html&amp;gt;&amp;lt;html&amp;gt;    &amp;lt;head&amp;gt;        &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;        &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;    &amp;lt;/head&amp;gt;    &amp;lt;body&amp;gt;        &amp;lt;div  i

推荐文章

热门文章

相关标签