热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Android实现加载广告图片和倒计时的开屏布局

这篇文章主要介绍了Android实现加载广告图片和倒计时的开屏布局,需要的朋友可以参考下

这是一个android开屏布局的实例,可以用于加载广告图片和倒计时的布局。程序中设置的LayoutParams,划分额外空间比例为6分之5,具体权重比例可根据用户自己需求来自定义,异步加载广告图片,相关的Android代码。

具体实现代码如下:

package cn.waps.extend;
import android.app.Activity;
import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Color;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.RoundRectShape;
import android.os.AsyncTask;
import android.os.Handler;
import android.os.Looper;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.qcn.wzlz.AppConnect;
import com.qcn.wzlz.SDKUtils;
public class LoadingPopAd {
 private final static Handler mHandler = new Handler();
 private static LoadingPopAd loadingAppPopAd;
 public static LoadingPopAd getInstance(){
 if(loadingAppPopAd == null){
  loadingAppPopAd = new LoadingPopAd();
 }
 if (Looper.myLooper() == null) {
  Looper.prepare();
 }
 return loadingAppPopAd;
 }
 /**
 * 获取开屏布局
 * @param context
 * @param time
 * @return
 */
 public View getContentView(Context context, int time){
 return getLoadingLayout(context, time);
 }
 private LinearLayout getLoadingLayout(final Context context, final int time){
 // 整体布局
 LinearLayout layout = new LinearLayout(context);
 layout.setOrientation(LinearLayout.VERTICAL);
 layout.setGravity(Gravity.CENTER);
 int bg_id = context.getResources().getIdentifier("loading_bg", "drawable", context.getPackageName());
 if(bg_id != 0){
  layout.setBackgroundResource(bg_id);
 }
 // 加载广告图片和倒计时的布局,用与
 LinearLayout l_layout = new LinearLayout(context);
 l_layout.setGravity(Gravity.CENTER);
 // 设置LayoutParams,划分额外空间比例为6分之5(具体权重比例可根据自己需求自定义)
 l_layout.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT, 1f));
 // 加载图片的布局
 RelativeLayout pop_layout = new RelativeLayout(context);
 TextView timeView = new TextView(context);
 timeView.setText("剩余" + time + "秒");
 timeView.setTextSize(10);
 timeView.setTextColor(Color.BLACK);
 timeView.setPadding(8, 3, 6, 2);
 int num = 12;
 // 对手机进行屏幕判断
 int displaySize = SDKUtils.getDisplaySize(context);
 if(displaySize == 320){
  num = 8;
 }else if(displaySize == 240){
  num = 6;
 }else if(displaySize == 720){
  num = 16;
 }else if(displaySize == 1080){
  num = 20;
 }
 float[] outerRadii = new float[] { 0, 0, num, num, 0, 0, num, num};
 ShapeDrawable timeView_shapeDrawable = new ShapeDrawable();
 timeView_shapeDrawable.setShape(new RoundRectShape(outerRadii, null, null));
 timeView_shapeDrawable.getPaint().setColor(Color.argb(255, 255, 255, 255));
 timeView.setBackgroundDrawable(timeView_shapeDrawable);
 //异步执行倒计时
 //异步加载广告图片
 new ShowPopAdTask(context, pop_layout, timeView).execute();
 new TimeCountDownTask(timeView, time).execute();
 TextView textView = new TextView(context);
 textView.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT, 5f));
 textView.setText("正在启动,请稍后...");
 textView.setGravity(Gravity.CENTER);
 textView.setTextColor(Color.WHITE);
 l_layout.addView(pop_layout);
 layout.addView(l_layout);
 layout.addView(textView);
 return layout;
 }
 private class TimeCountDownTask extends AsyncTask{
 TextView timeView;
 int limit_time = 0;
 TimeCountDownTask(TextView timeView, int time){
 this.timeView = timeView;
 this.limit_time = time;
 }
 @Override
 protected Boolean doInBackground(Void... params) {
  while(limit_time > 0){
  mHandler.post(new Runnable(){
   @Override
   public void run() {
   timeView.setText("剩余" + limit_time + "秒");
   }
  });
  try {
   Thread.sleep(1000);
  } catch (Exception e) {
   e.printStackTrace();
  }
  limit_time--;
  }
  return null;
 }
 }
 private class ShowPopAdTask extends AsyncTask{
 Context context;
 RelativeLayout pop_layout;
 LinearLayout popAdView;
 TextView timeView;
 int height_full = 0;
 int height = 0;
 ShowPopAdTask(Context context, RelativeLayout pop_layout, TextView timeView){
  this.cOntext= context;
  this.pop_layout = pop_layout;
  this.timeView = timeView;
 }
 @Override
 protected Boolean doInBackground(Void... params) {
  try {
  height_full = ((Activity)context).getWindowManager().getDefaultDisplay().getHeight();
  int height_tmp = height_full - 75;//75为设备状态栏加标题栏的高度
  height = height_tmp * 5/6;
  while(true){
   if(((Activity)context).getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE
   && height_full <= 480){
   popAdView = AppConnect.getInstance(context).getPopAdView(context, height, height);
   }else{
   popAdView = AppConnect.getInstance(context).getPopAdView(context);
   }
   if(popAdView != null){
   mHandler.post(new Runnable(){
    @Override
    public void run() {
    pop_layout.addView(popAdView);
    popAdView.setId(1);
    //倒计时布局所需的LayoutParams
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    params.addRule(RelativeLayout.ALIGN_TOP, popAdView.getId());
    params.addRule(RelativeLayout.ALIGN_RIGHT, popAdView.getId());
    // 对手机进行屏幕判断
    int displaySize = SDKUtils.getDisplaySize(context);
    if(displaySize == 320){
     params.topMargin=1;
     params.rightMargin=1;
    }else if(displaySize == 240){
     params.topMargin=1;
     params.rightMargin=1;
    }else if(displaySize == 720){
     params.topMargin=3;
     params.rightMargin=3;
    }else if(displaySize == 1080){
     params.topMargin=4;
     params.rightMargin=4;
    }else{
     params.topMargin=2;
     params.rightMargin=2;
    }
    pop_layout.addView(timeView, params);
    }
   });
   break;
   }
   try {
   Thread.sleep(500);
   } catch (InterruptedException e) {
   e.printStackTrace();
   }
  }
  } catch (Exception e) {
  e.printStackTrace();
  }
  return null;
 }
 }
}


推荐阅读
  • 本文介绍了基于Java的在线办公工作流系统的毕业设计方案,涵盖了MyBatis框架的应用、源代码分析、调试与部署流程、数据库设计以及相关论文撰写指导。 ... [详细]
  • 利用Cookie实现用户登录状态的持久化
    本文探讨了如何使用Cookie技术在Web应用中实现用户登录状态的持久化,包括Cookie的基本概念、优势及主要操作方法,并通过一个简单的Java Web项目示例展示了具体实现过程。 ... [详细]
  • 本文探讨了Android系统中联系人数据库的设计,特别是AbstractContactsProvider类的作用与实现。文章提供了对源代码的详细分析,并解释了该类如何支持跨数据库操作及事务处理。源代码可从官方Android网站下载。 ... [详细]
  • 作为一名程序员,是否应该在业余时间承接额外的工作以增加收入?本文探讨了接私活的利弊,并提供了实用建议。 ... [详细]
  • 浅谈Android五大布局——LinearLayout、FrameLayout和AbsoulteLa
    为什么80%的码农都做不了架构师?Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦。 ... [详细]
  • LoadRunner中的IP欺骗配置与实践
    为了确保服务器能够有效地区分不同的用户请求,避免多人使用同一IP地址造成的访问限制,可以通过配置IP欺骗来解决这一问题。本文将详细介绍IP欺骗的工作原理及其在LoadRunner中的具体配置步骤。 ... [详细]
  • 本文探讨了Java编程语言中常用的两个比较操作符==和equals方法的区别及其应用场景。通过具体示例分析,帮助开发者更好地理解和使用这两个概念,特别是在处理基本数据类型和引用数据类型的比较时。 ... [详细]
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 本文概述了在GNU/Linux系统中,动态库在链接和运行阶段的搜索路径及其指定方法,包括通过编译时参数、环境变量及系统配置文件等方式来控制动态库的查找路径。 ... [详细]
  • 本文详细介绍了如何使用Rufus工具制作一个兼容UEFI启动模式的Windows Server 2008 R2安装U盘,包括必要的软件和步骤。 ... [详细]
  • 本文介绍如何使用 Python 计算两个时间戳之间的时间差,并将其转换为毫秒。示例代码展示了如何通过 `time` 和 `datetime` 模块实现这一功能。 ... [详细]
  • 本文介绍了如何通过 ADB 命令行工具启动和停止 Android 应用。通过简单的命令,您可以轻松地控制设备上的应用运行状态。 ... [详细]
  • 使用 ModelAttribute 实现页面数据自动填充
    本文介绍了如何利用 Spring MVC 中的 ModelAttribute 注解,在页面跳转后自动填充表单数据。主要探讨了两种实现方法及其背后的原理。 ... [详细]
  • 使用REM和媒体查询实现响应式布局
    本文介绍如何利用REM单位和媒体查询(Media Queries)来创建适应不同屏幕尺寸的网页布局。通过具体示例,展示在不同屏幕宽度下如何调整页面元素的样式。 ... [详细]
  • SPFA算法详解与应用
    当图中包含负权边时,传统的最短路径算法如Dijkstra不再适用,而Bellman-Ford算法虽然能解决问题,但其时间复杂度过高。SPFA算法作为一种改进的Bellman-Ford算法,能够在多数情况下提供更高效的解决方案。本文将详细介绍SPFA算法的原理、实现步骤及其应用场景。 ... [详细]
author-avatar
Cucci419_631
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有