Android 优化广告图加载

Android app启动页广告 一款app刚出世的时候是没有广告的,流畅的速度和粘性的设计,让这款app使用的人越来越多,这个时候,广告就诞生了,app中加入广告的位置有很多,最常见的就是启动页的广告,首页的banner的轮询广告,其他页面的一些角标广告。今天我这里实现的是一个Android的启动页的广告,支持倒计时,和跳过,点击进入广告的详情页。今天记录下来,也给大家参考。 首先来看效果图: 我们都 阅读详情
       Glide.with(context).asBitmap().load(url).into(new SimpleTarget<Bitmap>() {
           @Override
           public void onResourceReady(@androidx.annotation.NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
               imageView.setImageBitmap(resource);
           }

           @Override
           public void onLoadFailed(Drawable errorDrawable) {
               super.onLoadFailed(errorDrawable);
           }
       });

作用是:下载完成后,把图片显示在你广告图上,由于glide有三级缓存机制,因此,最好是提前在接口返回的时候,进行预加载,然后进入到广告启动的流程中的时候就可以直接复用上一次的bitmap,不会浪费相应的时间。因此思路如下:

接口数据--->开始预加载广告图---》loadSplash---〉加载广告图并且无兜底图

等宽显示广告图:

    public static void scaleImage(final Activity activity, final ImageView view, Bitmap bitmap) {
        // 获取屏幕的高宽
        Point outSize = new Point();
        activity.getWindow().getWindowManager().getDefaultDisplay().getSize(outSize);

        // 解析将要被处理的图片
        final Bitmap resourceBitmap = bitmap;

        if (resourceBitmap == null) {
            return;
        }

        // 开始对图片进行拉伸或者缩放

        // 使用图片的缩放比例计算将要放大的图片的高度
        final int bitmapScaledHeight = Math.round(resourceBitmap.getHeight() * outSize.x * 1.0f / resourceBitmap.getWidth());

        // 以屏幕的宽度为基准,如果图片的宽度比屏幕宽,则等比缩小,如果窄,则放大
        final Bitmap scaledBitmap = Bitmap.createScaledBitmap(resourceBitmap, outSize.x, bitmapScaledHeight, false);
        //图宽度
        Log.e("MainActivity", "resourceBitmap.getHeight:" + resourceBitmap.getHeight());
        //图片高度
        Log.e("MainActivity", "resourceBitmap.getWidth:" + resourceBitmap.getWidth());
        //屏幕宽度
        Log.e("MainActivity", "outSize.x:" + outSize.x);

        //传入到下面的bitmap
        Log.e("MainActivity", "scaledBitmap.getHeight():" + bitmapScaledHeight);

        view.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
            @Override
            public boolean onPreDraw() {
                try {
                    view.getViewTreeObserver().removeOnPreDrawListener(this);
                    //这里防止图像的重复创建,避免申请不必要的内存空间
                    if (scaledBitmap.isRecycled())
                        //必须返回true
                        return true;
                    // 当UI绘制完毕,我们对图片进行处理
                    int viewHeight = view.getMeasuredHeight();
                    //最终显示的图片
                    Bitmap finallyBitmap = null;
                    Log.e("MainActivity", "viewHeight:" + viewHeight);
                    //y + height must be <= scaledBitmap.getHeight()
                    if (scaledBitmap.getHeight() > viewHeight) {
                        int offset = (scaledBitmap.getHeight() - viewHeight) / 2;// 计算将要裁剪的图片的顶部以及底部的偏移量
                        int finallyBitmapHeight = scaledBitmap.getHeight() - (offset * 1); // 对图片以中心进行裁剪,裁剪出的图片就是非常适合做引导页的图片了
                        Log.e("MainActivity", "offset:" + offset);
                        Log.e("MainActivity", "finallyBitmapHeight:" + finallyBitmapHeight);
                        finallyBitmap = Bitmap.createBitmap(scaledBitmap, 0, 0, scaledBitmap.getWidth(), finallyBitmapHeight);
                    } else {
                        int finallyBitmapHeight = scaledBitmap.getHeight();
                        Log.e("MainActivity", "finallyBitmapHeight:" + finallyBitmapHeight);
                        finallyBitmap = Bitmap.createBitmap(scaledBitmap, 0, 0, scaledBitmap.getWidth(), finallyBitmapHeight);
                    }
                    if (null != finallyBitmap) {
                        if (!finallyBitmap.equals(scaledBitmap)) {//如果返回的不是原图,则对原图进行回收
                            scaledBitmap.recycle();
                            System.gc();
                        }
                    }
                    // 设置图片显示
                    view.setImageBitmap(finallyBitmap);
                } catch (Exception e) {
                    Log.e("MainActivity", "图片异常e:" + e.toString());
                }
                if (resourceBitmap != null && !resourceBitmap.isRecycled())
                    resourceBitmap.recycle();
                return true;
            }
        });
    }
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, 
    DataSource dataSource, boolean isFirstResource) {
    // 得到当前imageView的宽度(我设置的是屏幕宽度),获取到imageView与图片宽的比例,然后通过这个比例去设置imageView的高
    ViewGroup.LayoutParams params = mAd.getLayoutParams();
    int vw = mAd.getWidth();
    float scale = (float) vw / (float) resource.getIntrinsicWidth();
    int vh = Math.round(resource.getIntrinsicHeight() * scale);
    params.height = vh;
    mAd.setLayoutParams(params);
    return false;
}

转自:Android 启动白屏优化及公告闪图秒加载 - 简书

android广告SDK原理详解(附源码) 广大的开发者吃糠咽菜开发了一两款APP,获取了一些流量后自然就会想到流量变现,一般情况下大家会选择到百度联盟或者Google Admob这些广告服务提供商注册开发者账号,在自己的APP里面加上几行广告位代码,集成他们的广告SDK包。然后谋事在人,成事在天,只有每天看报表查查收益。   也有一些开发者为了能够提高自己的变现水平,同时接入了好几家的sdk,哪家出的收益高一点我就出哪家的广告,但是这 阅读详情

相关推荐

Unity3D集成有米广告安卓平台详解

有米广告API提供了多种功能接口,使得开发者能够在自己的应用中集成广告功能,实现广告的展示、点击、收益等操作。了解API接口的功能是编写有效广告调用脚本的前提。接口分类主要分为如下几类:展示接口:用于请求广告并展示,是最常用的接口之一。计费接口:当用户完成广告互动后,通过此接口确认广告计费。数据接口:提供广告相关的数据统计和查询服务。每个接口都有一套详细的请求参数和返回数据格式,需要开发者严格遵守以确保广告能够正确加载和计费。

weixin_42350014的博客 373

Glide-回调与监听(四)

Glide-回调与监听(四)

Errol's Blog 5549

在Android应用中实现Google横幅广告教程

AdMob SDK为移动开发者提供了一套完整的广告解决方案,让开发者能够轻松地在应用中集成广告单元,并通过广告来获得收入。其主要特点如下:易用性:AdMob SDK提供了一套简单的API,开发者可以快速集成并开始显示广告,无需深入的广告知识。多样化的广告格式:包括横幅、插页式、奖励式视频以及原生广告等多种格式,满足不同场景的广告展示需求。强大的分析工具:AdMob与Google Analytics集成,为开发者提供详尽的广告性能和用户行为分析。高度定制化。

weixin_42356162的博客 816

Glide的高级用法

自定义的target 上篇文章在分析Glide.with(this).load(url).into(iv);这行代码的源码过程中,在分析到into方法时,这个into(ImageView view)方法其实GenericRequestBuilder的into方法。这个into(ImageView view)方法又调用了GenericRequestBuilder类的into(Y target)方法,...

hujin2017的博客 2374

Android启动页广告动态加载与倒计时功能实战Demo

再好的设计也需要数据验证。

weixin_42361478的博客 903

我的二进制漏洞挖掘学习路线

漏洞挖掘也分好多方向:浏览器漏挖,虚拟化,iot,车联网,应用安全等。而且也要区分一下平台,Linux,Android,Windows,还有一些其他的系统。在基础知识拿捏以后,Windows下如OD,windbg,x64dbg。IDA,GDB要会并联调。然后需要了解一下漏洞的知识,漏洞利用的知识。可以从复现漏洞,CTF来学习,学习完之后就可以通过审计源码或者反汇编二进制程序来挖掘。然后就是练就行了,多关注一下最新安全消息,安全漏洞。

qq_36918532的博客 4944

Android——Glide加载Gif图片监听加载回调函数onResourceReady问题

Glide相比Picasso来说有一个优势不错就是可以很方便的加载Gif图。 比如这样: Glide.with(activity).load(gifUrl).placeholder(R.drawable.plugmain_no_banner).diskCacheStrategy(DiskCacheStrategy.SOURCE).into(imgEg); 如果图片是gif...

u014132820的专栏 1万+

通达信-申万宏源金融终端本地数据转sqlite3,2、解析申万宏源C:/zd_swhy_gm/vipdoc/sh/lday的sh600000股票数据

为量化做准备,通达信-申万宏源金融终端本地数据转sqlite3,解析申万宏源C:/zd_swhy_gm/vipdoc/sh/lday的sh600000股票数据

wuyaqi的博客 511

android 动画回调函数,Android——Glide加载Gif图片监听加载回调函数onResourceReady问题...

Glide相比Picasso来说有一个优势不错就是可以很方便的加载Gif图。比如这样:Glide.with(activity).load(gifUrl).placeholder(R.drawable.plugmain_no_banner).diskCacheStrategy(DiskCacheStrategy.SOURCE).into(imgEg);如果图片是gif格式,那么可以自动显示GIf动画...

weixin_36070745的博客 1248

智能车竞赛蚂蚁搬家组:NXP-MicroPython与STC单片机协同搬运策略解析

本文深入解析智能车竞赛蚂蚁搬家组中NXP-MicroPython与STC单片机的协同搬运策略。通过硬件选型、通信架构设计、效率优化及实战经验分享,展示了如何利用NXP-MicroPython的实时控制与STC单片机的感知导航优势,实现高效多智能体协同作业,为参赛团队提供实用技术参考。

motor的博客 1080

109. SAP ABAP 应用程序中的锁机制和工作原理介绍

SAP ABAP 系统中的锁概念,是 SAP ABAP 为了保证`数据一致性`而引入的一种保护机制。 像 SAP 这种复杂的企业级应用,系统中同一时间段的同一份数据,可能会有多个 Transaction(终端用户或者 API )同时进行读写操作。为了防止出现数据不一致,SAP ABAP 引入了锁机制。 这种锁机制并非数据库服务器层面的锁,而是在 SAP ABAP 应用服务器层面上工作,加锁和解锁都由专门的 ABAP Function Module 来完成。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1468

图片处理

一、加载图片的框架 二、加载GiF图片的处理 1、使用Glide GlideApp.with(context) .load(R.drawable.main_recommend) .apply(new RequestOptions().diskCacheStrategy(DiskCacheStrategy.RESOURCE)) .listener(new RequestListener() {

yangjunjin的博客 225

绕过App某加密企业版加固Frida检测

可以发现dlsym函数加载了两次pthread_create,可以认为这两个进程(或某一个进程)是和Frida的检测有关的,于是为了绕过检测,我们可以让它加载一个虚假的pthread_create函数,得到一个空结果绕过检测。成功绕过了libnllvm1717052779924.so的检测,又到了libface_nllvm.so的检测,使用同样的方法去绕过libface_nllvm.so的检测,代码我这里就不上了,大家可以自己修改以下。dlsym()函数的作用是在已经加载的动态链接库中查找指定符号的地址。

墨痕诉清风的博客 1621

Cimoc开源漫画阅读器终极指南:聚合40+图源,免费追更离线下载一键搞定

Cimoc是一款完全免费、开源的Android漫画阅读器,它把数十个漫画源的搜索、阅读、下载和收藏整合进一个清爽无广告的应用里,让你告别"一个平台装一个App"的烦恼。无论你是刚入门的追漫新人,还是想动手魔改图源的开发者,这篇全攻略都能带你从零上手、玩出花样。 ## 痛点开场:你的追漫路上,是不是也踩过这些坑? 想看的漫画分散在五六个平台,每个都要单独下载App;打开正版阅读器,翻几页就弹一次

gitblog_01136的博客 696

学习STM32的CAN总线通信

在配置时,确保您启用了CAN总线功能。CAN节点是CAN总线上的一个设备,每个节点都有唯一的标识符。在CAN总线中,有两种类型的节点:CAN控制器和CAN外设。步骤2:配置CAN总线 在STM32CubeMX中,选择CAN总线模块并进行必要的配置。在CAN总线中,有两个重要的概念:CAN节点和CAN帧。步骤5:测试CAN总线通信 在成功编译和烧录代码后,您可以使用串口调试助手或其他CAN总线工具来测试CAN总线通信。步骤3:编写CAN总线通信代码 在项目的主代码文件中,我们将编写CAN总线通信的示例代码。

2401_85258012的博客 496

量化交易零基础入门教程

特点 从零开始教编程。靠谱的量化交易学习资源稀少,且具有不讲编程、代码较难、过多等不适合新手等问题,本教程中则会从零开始教编程,解决量化入门过难过编程门槛这一问题。 量化与编程相结合。本教程不仅会教编程,而且会尽量结合量化情景,减少“我要做量化交易为什么要看这些用来培训程序员的东西”的愤懑。 简易精炼,快速入门。尽量只讲最核心最常用的知识,助你快速摆脱想学习量化却处处陌生不知所措的茫然的新手阶段。 读前说明 文后会有自测与自学,包括一些额外的延伸自学内容以及稍有难度的自测题目。 最最最基础的股票.

JanLEE 2886

新浪微博 android2.3,BlackLight新浪微博客户端

BlackLight是一款适合安卓用户的手机微博客户端,BlackLight客户端纯净清爽,页面简洁明了,且易操作,旨在为用户打造简洁好用的微博客户端。欢迎来最火软件站点击BlackLight新浪微博客户端下载!更多微博周边推荐:Aisen新浪微博客户端。BlackLight新浪微博客户端介绍BlackLight新浪微博客户端介绍什么是BlackLight?BlackLight 在界面设计上遵循...

weixin_42462007的博客 339

SAP 未清PO数量 = 采购订单数量 - 已收货数量

本文介绍了SAP系统中查询未清PO数量的6种方法:1.标准采购报表(ME2L/ME2M/ME2N)适合业务用户快速查询;2.物料需求报表(MD04)可查看单个物料的供需情况;3.SQVI快速查询器提供自定义字段的灵活性;4.ABAP报表适合开发人员处理复杂逻辑;5.SAPQuery经配置后可供业务用户使用;6.BI/HANA方案适合大数据量分析。每种方法各有优缺点,用户可根据自身技术水平和具体需求选择,日常查询推荐使用标准采购报表ME2L/ME2M。

金牌架构师 1854

双端漫画阅读工具深度解析:纯净体验、资源聚合与长期使用指南

在数字内容消费领域,资源聚合与跨平台同步是提升用户体验的关键技术。其核心原理在于通过爬虫或API接口,对分散的网络图源进行结构化整合,并在统一阅读器内呈现。这项技术的价值在于极大降低了用户获取内容的搜寻成本,解决了多设备间数据与体验割裂的痛点,尤其适用于漫画、小说等序列化内容的消费场景。具体到漫画阅读场景,一个优秀的工具需要平衡‘纯净无限制’的便捷性与资源动态更新的稳定性,同时应对iOS与安卓生态差异带来的分发挑战。本文将以近期流行的双端漫画工具为例,剖析其如何实现‘高画质’与‘更新快’的承诺,并围绕‘图源

weixin_34082695的博客 293

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

星宿UI V1.1-后台优化激励视频判断插件

介绍: 1.修复资源下载页下拉重复出现 2.修复微信文章更多空白 3.优化激励视频判断 4.优化文章标签判断 5.新增评论功能(不是很完善) 6.修复安卓分享朋友圈 7.修改qq赞助替换为返回 8.修复视频自适应屏幕 9.新增资源分类 10.新增文章第一张图片为特色图片 11.修改金刚区跳转小程序和后台可自定义修改 12.新增文章详情跳转小商店 13.优化资源界面,分类,搜索界面UI提升 14.资源下载,文章分开控制激励视 频15.新增资源页面分类选择卡 特别说明: 1.首页一定要有几篇文章可以免费阅读,

字节网盘SEO工具 218

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Android-APP启动优化

Android-APP启动优化伪优化案例占位图方案总结(修改全局的主题)修改局部的主题真正的优化优化真正优化的总结 黑白屏问题优化 黑白屏在商业APP中的价值 如何使用Traceview工具对优化定位处理 伪优化 用于用户体验,用来给到用户体验,没有实质性的优化 案例 注意看这一块(parent=“Theme.AppCompat.Light”) 如果没写这一块,启动时会是一个黑屏,写了这一块,启动时会是一个白屏; <!-- Base application theme. --> &

weixin_43506260的博客 2932

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

js 通过浏览器直接打开应用程序(IOS,Android)

实现效果如下图所示,在手机浏览器中访问京东的手机版网站(m.jd.com),顶部会有一个广告图,点击这个广告图,如果手机上已经安装了京东App,则直接打开,如果没有安装,则开始下载。实现方式1.为Android应用的启动Activity设置一个Schema,如下:<data android:host="splash" android:scheme="cundong"/>2.用户点击浏览器中的链接时,

Code-lover's Learning Notes 1万+

安卓应用广告分析与优化实战教程

在安卓应用的世界里,广告的存在有时会影响用户体验。今天,我们就来深入学习如何对安卓应用中的广告进行分析与优化,同时了解安卓四大组件及 app 生命周期等重要知识。

m0_57836225的博客 1268

google android广告异步加载,javascript 广告后加载,加载完页面再加载广告

先加载完页面再加载广告的原理:网页打开的顺序都是按页面从上到下的顺序加载完成的,所以要想使广告不影响页面打开速度,就要等页面全部打开完成后,再加载JS代码。等页面加载完再加载广告其实就是将广告的 JS 代码放在页面的底部,等页面内容打开完成后再加载到广告代码,再用页面上预留好的的 DIV 输出广告。使用方法:1、将以下代码放置页面中想要放广告的地方载入中…2、将一下代码放置页面底部,也就是foot...

weixin_31974443的博客 1482

安卓SDK——广告植入

移动广告平台的话,好像还挺多的,介绍就不一一介绍了(因为我也不太了解 orz),简单搜了一下 不过感觉这几年不怎么兴这个了...撑死就是开屏广告...带有其他广告形式的软件基本上被归类到流氓软件了 不如一个“高级账号”解锁全部功能圈钱来的实在 (逃 BAT应该也有自己的广告接入平台?我猜... 国际上主要是Admob 国内就比较多了,多盟、万普、有米、点入等等.... 然后这篇文章关于...

旧日灯塔 8703

android中webview打开有广告,Android快速去掉WebView上的烦人广告

近日,在把某网站用WebView打包到App里面的时候,出现的一个麻烦。看下图广告额,有广告。不影响阅读体验的广告都是可以接受的。但是有一问题是因为有一个广告div比屏幕要大,导致该网页在在移动端上可以左右滑动,这个就没法忍受了,看下图广告没办法了,只能把广告去掉了.首先看看集成网页的代码.private WebView webView;private WebSettings settings;@...

weixin_31889665的博客 1310
上一篇: Android 启动页白屏优化
下一篇: android Glide加载长图
leverge2009
博客等级 码龄14年 34粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值