Android 优化广告图加载

这篇具有很好参考价值的文章主要介绍了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 启动白屏优化及公告闪图秒加载 - 简书文章来源地址https://www.toymoban.com/news/detail-806618.html

到了这里,关于Android 优化广告图加载的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PC首页资源加载速度由8s降到2s的优化实践

    随着需求的不断开发,前端项目不断膨胀,业务提出:你们的首页加载也太慢啦,我都需要7、8秒才能看到内容,于是乎主管就让我联合后端开启优化专项,目标是3s内展示完全首页的内容。 开启优化时,我们要清晰的知道现状和目标,以及我们采用什么样的手段,通过检测

    2024年02月09日
    浏览(36)
  • 【Angular性能优化】项目8版本加载速度缓慢、白屏时间、首页渲染性能优化方案

    随着业务的代码一点点增加,加上Angular的项目本身就比 vue、react 的重一些,随之而来的启动速度,更改文件后编译速度,以及打包速度也会变慢,于是乎想着优化下我们的项目。 本文章主要说的是 : 打包Angular项目的一些配置,性能优化方面的方案 打包后,用户进入页面的

    2024年04月10日
    浏览(51)
  • Android优化RecyclerView图片展示:Glide成堆加载批量Bitmap在RecyclerView成片绘制Canvas,Kotlin(b)

    对 Android GridLayoutManager Glide批量加载Bitmap绘制Canvas画在RecyclerView,Kotlin(a)-CSDN博客 改进,用Glide批量把Bitmap加载出来,然后在RecyclerView成片成堆的绘制Canvas,此种实现是RecyclerView加载多宫格图片展示,卡顿丢帧最低的一种实现,上下滑动流畅。 Android GridLayoutManager Glide批量

    2024年04月25日
    浏览(44)
  • Android 通用首页代码示例

    在 Android 中,使用 NestedScrollView 来包含多个部分,如横向 Banner、GridView 和 RecyclerView,可以通过嵌套不同的布局组件来实现。以下是一个示例布局的 XML 文件,展示如何将这些部分嵌套在 NestedScrollView 内: 在这个示例布局中: 使用 NestedScrollView 来创建可滚动的容器。 使用垂直

    2024年02月09日
    浏览(39)
  • Android UI - 实现广告Banner轮播效果,Android MVP模式详解

    android:layout_width=“wrap_content” android:layout_height=“wrap_content” android:layout_marginTop=“10dip” android:layout_gravity=“bottom|center_horizontal” android:layout_marginBottom=“10dp” android:gravity=“center” View android:id=“@+id/v_dot0” style=“@style/dot_style” android:background=“@drawable/dot_focused” android:vi

    2024年04月13日
    浏览(46)
  • Android 广告机图片视频轮播

    最近因为要做一个广告机上图片视频轮播,所以又是百度,github上一堆找,结果发现并没有特别合适的,不是播放视频首帧黑屏,就是切换界面后,没法继续播放,或者动态更新数据后,没法继续轮播等等问题,所以最后结合别人的方案自己修改了一下,具体参考android 实现

    2024年02月16日
    浏览(38)
  • Android逆向实战(一)腾讯新闻去开屏广告

        上次反编译一个工具类app失败,原因是使用了360加固,回编译后无法启动。一般来讲,大厂的app考虑到性能、兼容性、包体积等,通常不用加固。因此,本次我们选一个大一些的app-腾讯新闻。写在前面:本篇博客仅用来研究和学习,如有侵权,请联系我删除,谢谢。 目

    2024年02月01日
    浏览(38)
  • 【已解决】Edge自定义首页 IE11自定义首页【Edge去广告】【IE去广告】

    《一眼就会系列》每天抽出一点时间巩固基础!同时学习最新知识(与时俱进)!罗列、简述、概括问题,让读者扫一眼就知道该如何处理。 一:IE自定义首页设置。 二:Edge自定义首页设置。 请 认真的看一步步设置 ,设置好,以后每次打开都是 您喜欢的地址首页 哦! 全

    2024年02月06日
    浏览(38)
  • Android逆向学习(四)app修改smali函数跳过弹窗广告,等待广告,更新提醒

    这是吾爱破解课程的第三个练习,我在写这篇博客时遇到了vscode插件bug,已经想办法联系原作者了,希望能够尽快更新修复这个问题,废话少说let’s go 打开后会出现一个带有时间的广告弹窗和一大堆弹出广告,我们的任务就是去掉这些东西 我们首先打开开发助手的activity查

    2024年02月09日
    浏览(43)
  • Android Studio搭建简单类微信小程序首页框架

    目录 1、页面布局 2、代码具体实现 3、界面展示 第一步:创建top.xml和bottom.xml.文件,用于设计界面顶部与底部按键。再修改activity_main.xml文件,将前面两个文件效果加入。最后设计四个功能界面。 1、 top.xml 用于首页标题显示 bottom.xml 四个linearlayout(线性布局)中均包含一个

    2024年02月09日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包